mysql在表之间移动行

时间:2011-03-24 13:46:33

标签: php mysql

我有2个表,table1和table2。

我在table1中有一行,想要将它移到table2并从table1中删除它。基本上是剪切+粘贴。

我正在使用php。我目前的计划是从table1中选择,在php中存储数据,插入到table2中,然后从table1中删除。这似乎是一个非常漫长的过程。

这真的是最好的方法吗?

7 个答案:

答案 0 :(得分:27)

您至少需要2个查询:

INSERT INTO table2 (column_name1, column_name2) SELECT column_name1, column_name2 FROM table 1 WHERE <insert_where_clause_here>

DELETE FROM table1 WHERE <your_where_clause>

我认为使用MySQL

没有更短的方法

答案 1 :(得分:6)

使用INSERT INTO ... SELECT从其他表中插入数据

答案 2 :(得分:5)

只需将其设为一个表并创建一个标志字段即可确定记录是否已经过审核。

因此,您唯一需要的只是简单的更新查询。

这就是一般情况下这样做的方式。

答案 3 :(得分:5)

我必须解决同样的问题,这就是我用作解决方案的方法。

要使用此解决方案,源表和目标表必须完全相同,并且必须在第一个表中具有唯一且自动递增的ID(以便永远不会重复使用相同的ID)。

让我们说table1和table2具有这种结构

  

| ID | FIELD1 | FIELD2

您可以进行以下两个查询:

INSERT INTO table2
SELECT *
FROM table1
WHERE <your_where_clause>

DELETE FROM table1 
WHERE table1.id in
(SELECT table2.id 
FROM table2)

在我看来,这是比Pieter888建议的更好的解决方案,因为该解决方案没有考虑所选数据可能与删除的数据不同(因为表1中的数据可以在第一和第二之间变化查询),这样你就安全了。

答案 4 :(得分:3)

我发现我必须在初始查询和插入之间准备数据。这是在基于codeigniter的CMS上,所以它使用它们的功能并返回格式,但可以帮助某人。

function move_row($id = 0) {
    /* first copy it from table_one to table_two */
    $query = $this->db->query('select * from table_one where id = ' . $id);
    $row = $query->row_array(); /* this appears to be required */
    $this->db->insert('table_two',$row);

    /* then delete it from table_one */
    return($this->db->query('delete from table_one where id = ' . $id));
}

(裸骨,没有错误检查等)

答案 5 :(得分:0)

问题的简短回答是,很多人已经回答了,没有。

但我感觉到你正在寻找的是一种插入新表并在一次操作中从旧表中删除的方法。这是transactions的用途。

在提交事务之前,更改不会受到影响,这与实际移动的行具有相同的效果。

(不是在MySQL引擎内部移动,而是用户/查询)

我会使用INSERT SELECT并将命令包装在TRANSACTION中,如下所示:

DECLARE EXIT HANDLER FOR SQLEXCEPTION, SQLWARNING, NOT FOUND
BEGIN 
  ROLLBACK; 
  CALL ERROR_ROLLBACK_OCCURRED; 
END;

START TRANSACTION;
INSERT INTO table_new SELECT a,b,c FROM table_old WHERE x = 'something';
DELETE FROM table_old WHERE x = 'something';
COMMIT;

答案 6 :(得分:-2)

您可以像这样一次使用多个查询

在命令按钮上,该按钮具有在表1上提交数据的功能

使用此:

$query = mysql_query(insert into table1)

而不是:

mysql_query(insert into table2)

在插入表1的查询中写下这个:

$query2 = mysql_query(INSERT into TABLE2)
TRUNCATE TABLE TABLE2;

它为您提供了一次执行两个查询的权限