Dan*_*llo 16
不,您不能在一个SQL语句中移动记录.您必须使用INSERT后跟DELETE语句.您应该将这些语句包装到事务中,以确保复制操作保持原子状态.
START TRANSACTION;
INSERT INTO
new_table
SELECT
*
FROM
old_table
WHERE
some_field = 'your_criteria';
DELETE FROM old_table WHERE some_field = 'your_criteria';
COMMIT;
Run Code Online (Sandbox Code Playgroud)
Ike*_*ker 10
如果您真的想在单个SQL语句中执行此操作,则实现此目的的一种方法是在源表上创建一个"after delete"触发器,将该行插入目标表中.这样,您可以将行从源表中移动到目标表,只需将其从源表中删除即可.当然,这只有在您希望为源表上的每个删除插入目标表时才有效.
DELIMITER $$
DROP TRIGGER IF EXISTS TR_A_DEL_SOURCE_TABLE $$
CREATE TRIGGER TR_A_DEL_SOURCE_TABLE AFTER DELETE ON SOURCE_TABLE FOR EACH ROW BEGIN
INSERT IGNORE INTO TARGET_TABLE(id,val1,val2) VALUES(old.id,old.va1,old.val2);
END $$
DELIMITER ;
Run Code Online (Sandbox Code Playgroud)
因此,要将id为42的行从源表移动到目标表:
delete from source_table where id = 42;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10539 次 |
| 最近记录: |