同时对不同表进行操作的问题

来源:百度知道 编辑:UC知道 时间:2024/06/22 02:24:34
INSERT INTO table2 SELECT * FROM table1 WHERE t;
DELETE FROM table1 WHERE t;
我要同时对两个表进行不同的操作,不成功。但是只运行单独的一条都可以成功。是不是两条命令中不应该用分号隔开?

在mysql中将记录从一个表移动到另一个表中,通常的程序是:首先将记录从源表中复制到目标表中,然后删除源表中的数据。这个过程中要注意的是选择并插入语句和删除语句的条件要完全相符。
INSERT INTO table2 SELECT * FROM table1 WHERE t < CURDATE();
DELETE FROM table1 WHERE t < CURDATE();
以上两条mysql指令中,insert和delete所附加的条件并不是完全一致。比如说明天是30号,我们在29号23点59秒时正巧运行到这个脚本,那么可能的结果是记录并没有通过插入指令进入到table2表中,而在delete指令中则会将记录删除掉。虽然这样的情况有着极大的偶然性,但对于很多安全性要求高的程序来说,便不安全,会造成很多数据没有从table1转移到table2中便被删除了。因此安全的方法是:
SET @date_point = CURDATE();
INSERT INTO table2 SELECT * FROM table1 WHERE t < @date_point;
DELETE FROM table1 WHERE t < @date_point;
这样才能确保insert和delet语句所运用的条件是完全一致的。