13

我有一个开发数据库(MYSQL),我想在某个时候加载新数据。我想删除所有表格的内容。删除所有表(包括具有外键约束的表)内容的最佳方法是什么,尽可能自动化。是否有截断所有/删除所有等效约束?

谢谢

4

4 回答 4

29

我认为您可以执行以下操作:

  1. 禁用外键约束检查

    mysql> SET FOREIGN_KEY_CHECKS = 0;
    
  2. 截断你的表

    mysql> TRUNCATE MY_TABLE;
    
  3. 启用外键约束检查

    mysql> SET FOREIGN_KEY_CHECKS = 1;
    

我更喜欢暂时禁用外键约束,而不是删除/重新创建它们。

于 2009-09-30T17:41:21.377 回答
0

如果您想以更好的方式截断所有表,我认为删除并使用先前提取的数据库模式创建数据库。或者您可以只复制同一个数据库的两个副本 - 测试和空。填写表格后,只需删除 test db 并复制空以进行测试。

于 2009-09-30T17:37:00.403 回答
0

TRUNCATE (TABLE) tbl_name 将截断单个表。您可以将其粘贴在脚本中并使用所有表名循环遍历它。

http://dev.mysql.com/doc/refman/5.0/en/truncate.html

您可能也想研究迁移,但我认为 Alexey 有正确的方法。这与 RoR 在每次运行时处理重建测试数据库的方式非常相似。

于 2009-09-30T17:40:40.910 回答
0

这是我在命令提示符下执行的操作:

 mysql -Nse 'show tables' DATABASE_NAME | while read table; do mysql -e "SET FOREIGN_KEY_CHECKS = 0; TRUNCATE table $table" DATABASE_NAME; done

问题是,如果您需要身份验证,则需要-u YOUR_USERNAME -pYOURPASSWORD在两个 mysql命令之后添加一个。

如果您不想在命令提示符下输入密码(我从来没有),那么您需要在每次提示后复制并粘贴密码,这可能会根据表的数量进行多次。

于 2013-12-30T13:53:24.810 回答