我有一个开发数据库(MYSQL),我想在某个时候加载新数据。我想删除所有表格的内容。删除所有表(包括具有外键约束的表)内容的最佳方法是什么,尽可能自动化。是否有截断所有/删除所有等效约束?
谢谢
我有一个开发数据库(MYSQL),我想在某个时候加载新数据。我想删除所有表格的内容。删除所有表(包括具有外键约束的表)内容的最佳方法是什么,尽可能自动化。是否有截断所有/删除所有等效约束?
谢谢
我认为您可以执行以下操作:
禁用外键约束检查
mysql> SET FOREIGN_KEY_CHECKS = 0;
截断你的表
mysql> TRUNCATE MY_TABLE;
启用外键约束检查
mysql> SET FOREIGN_KEY_CHECKS = 1;
我更喜欢暂时禁用外键约束,而不是删除/重新创建它们。
如果您想以更好的方式截断所有表,我认为删除并使用先前提取的数据库模式创建数据库。或者您可以只复制同一个数据库的两个副本 - 测试和空。填写表格后,只需删除 test db 并复制空以进行测试。
TRUNCATE (TABLE) tbl_name 将截断单个表。您可以将其粘贴在脚本中并使用所有表名循环遍历它。
http://dev.mysql.com/doc/refman/5.0/en/truncate.html
您可能也想研究迁移,但我认为 Alexey 有正确的方法。这与 RoR 在每次运行时处理重建测试数据库的方式非常相似。
这是我在命令提示符下执行的操作:
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
命令之后添加一个。
如果您不想在命令提示符下输入密码(我从来没有),那么您需要在每次提示后复制并粘贴密码,这可能会根据表的数量进行多次。