用另一个表替换一个空表而不影响MySQL中的外键

时间:2016-01-08 21:16:08

标签: mysql sql

  • 我使用仅限结构
  • 迁移了数据库
  • 在这个数据库中,我有一个名为hash的表,当然是空的。
  • 此表已被大量其他表格用于foreign key
  • 我有另一个名为hash_copy的表,它刚刚从另一个数据库中复制而且已经记录了很多(500'000条记录)。

我尝试使用以下SQL语句

替换另一个表
SET FOREIGN_KEY_CHECKS=0;
RENAME TABLE hash to hash_empty, hash_copy to hash;
SET FOREIGN_KEY_CHECKS=1;

问题是,现在我所有的外键都是hash_empty,而这正是我试图避免的。

总结

我想关闭外键只是为了将一个表换成另一个表(抛空并插入完整的记录),而不必遍历所有引用它的表。

这可能吗?

提前致谢。

1 个答案:

答案 0 :(得分:2)

根据评论,可以将表复制到另一个表,如:

INSERT INTO hash SELECT * from hash_copy

更一般地说,insert-select语法的工作方式与您期望的一样;您可以指定列名(INSERT INTO hash(col1, col2, col3))并包含您通常会使用的任何SELECT语法(函数,连接,where子句等)。