MYSQL:在新表中插入一个值,同时从旧表中删除它?

时间:2014-01-09 15:43:29

标签: mysql temp-tables sql-insert delete-row

这可能吗?对于某些上下文,我正在使用临时表,并希望改变值。我只是想知道是否可以将一个表的列中的值插入到新表的列中,同时从第一个表中删除原始值(如果这是有意义的话)。

表1

   |id|    |Column_with_value|
    ---------------------------------       
    1       | blah                  |        
    ---------------------------------

表2

(empty)


变为:

表1

(empty)

表2

   |id|    |Column_with_value|
    ---------------------------------       
    1       | blah                  |        
    ---------------------------------

4 个答案:

答案 0 :(得分:1)

您可以在表1上使用触发器来侦听删除语句。

这样的事情:

CREATE TRIGGER `my_insert_table2_trigger`     
  AFTER DELETE ON `table1`     
  FOR EACH ROW     
BEGIN
  INSERT INTO `table2` VALUES (OLD.id, OLD.Column_with_value)
END

使用OLD,您可以访问已删除行的值。

答案 1 :(得分:0)

试试这个

CREATE TRIGGER Remove_Old
BEFORE DELETE ON Table_1
FOR EACH ROW
Insert Into Table_2
SELECt * From Table_1

答案 2 :(得分:0)

在表之间移动数据成本,使架构复杂化并增加维护。如果您有一个包含所有数据的表格,可能会更好,还有一个额外的列可以相应地标记它。

然而

INSERT INTO tbl_1 (id, column)
    SELECT id, column from tbl_2 where id=1;
DELETE FROM tbl1 where id=1;

或者,如果您只想将所有内容从完整表移动到空表,请尝试

RENAME TABLE tbl_1 TO tbl_2

答案 3 :(得分:0)

我不知道可以做到这一点的单一操作。但只要它保留在一个事务中,就没有必要将它放在一个操作中:

BEGIN;
SELECT * FROM table1 …;
UPDATE table2 …;
DELETE FROM table1 …;
COMMIT;