您用于CREATE TABLE ... SELECT
创建一个表,然后使用它。这将创建一个表,其中包含SELECT
您的情况下原始表中的列。然后您可以从原始表中删除行,将行移回原始表,INSERT INTO ... SELECT
然后删除临时表。这样您就不需要维护两个表,并且临时表将始终从原始表中获取最新的列。
请参阅 mysql手册。以下示例从手册中复制。
mysql> SELECT * FROM foo;
+---+
| n |
+---+
| 1 |
+---+
mysql> CREATE TABLE bar (m INT) SELECT n FROM foo;
Query OK, 1 row affected (0.02 sec)
Records: 1 Duplicates: 0 Warnings: 0
mysql> SELECT * FROM bar;
+------+---+
| m | n |
+------+---+
| NULL | 1 |
+------+---+
1 row in set (0.00 sec)
所以你需要这样的东西
CREATE TABLE bar SELECT * FROM foo WHERE fooColumn = 'whatever';
DELETE FROM foo where fooColumn <> 'whatever';
INSERT INTO foo SELECT * FROM bar;
DROP TABLE bar
如果您想避免过于频繁地创建和删除表,只需创建一次临时表。
INSERT INTO bar SELECT * FROM foo WHERE fooColumn = 'whatever';
DELETE FROM foo where fooColumn <> 'whatever';
INSERT INTO foo SELECT * FROM bar;
但是请确保您始终保持临时表和原始表同步,即如果您在原始表中添加或删除列,请确保立即在临时表中复制该列,因为INSERT INTO ... SELECT
只复制数据而不是模式。