MySQL:将整行从一个复制到另一个并删除原始行

时间:2013-02-12 21:50:10

标签: mysql

有人可以解释(或指向正确的方向)如何将多行从一个表移动到另一个表,并根据设定的标准从原始表中删除该行?

我理解

INSERT INTO table2 SELECT * FROM table1

将数据从一个表复制到另一个表但我需要删除原始表。原因是有人建议加快对表的查询,我应该将所有冗余数据(已结束,过期,超过3个月的产品)从主表移动到另一个表。

有一些背景知识,我有一个包含产品的表,有些产品已经过期但产品仍然需要访问。大约有50,000种产品已经过期,2,000种产品已经过期。有一个状态列(int 1 = active,2 = expired等)来确定在前端显示的内容。

我想这篇文章有两个问题:

  1. 有没有更好的方法来加速查询产品表而不删除过期的项目?
  2. 如果没有,如何将行从一个表移动到另一个表
  3. 非常感谢!

2 个答案:

答案 0 :(得分:6)

  

INSERT INTO table2(column_name1,column_name2)SELECT column_name1,   column_name2 FROM table 1 WHERE(where where子句)

     

DELETE FROM table1 WHERE(where where子句)

以上来源:mysql move row between tables

答案 1 :(得分:4)

表中的50,000条记录确实不是那么多。如果您遇到性能问题,我会查看您的查询和索引,以帮助加快性能。而且由于仍然需要访问那些过期的记录,因此维护多个表可能会更加困难。

但是,要按照您的要求将数据从一个表移动到另一个表,您只需要运行2个不同的语句。假设您要移动非活动产品:

INSERT INTO ProductsBackup SELECT * FROM Products WHERE Status <> 1
DELETE FROM Products WHERE WHERE Status <> 1

如果您的列上有Identities,则最好指定列名称。但假设ProductId是Identity,那么请小心将它们移到另一个表中,因为您可能不希望丢失原始ID,因为它可能指向其他表。

祝你好运。