4

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

我明白

INSERT INTO table2 SELECT * FROM table1

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

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

我猜这篇文章是2个问题:

  1. 有没有更好的方法可以在不删除过期商品的情况下加快商品表的查询速度?
  2. 如果没有,如何将行从一个表移动到另一个表

非常感谢!

4

2 回答 2

6

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

DELETE FROM table1 WHERE(此处为 where 子句)

以上来源:mysql在表之间移动行

于 2013-02-12T21:52:26.423 回答
4

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

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

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

如果您的列上有标识,则最好指定列名。但是假设 ProductId 是标识,那么请小心将它们移动到不同的表,因为您可能不想丢失原始 id,因为它可能指向其他表。

祝你好运。

于 2013-02-12T21:55:03.177 回答