是否可以使用单个SQL语句将记录从一个表移动到另一个表?

Pal*_*ami 4 mysql sql

我需要一个查询来将记录从一个表移动到另一个表而不使用多个语句?

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)


Luc*_*nes 5

否 - 您可以INSERT在一个嵌套语句中执行此操作,但仍需要删除该记录.