我有一个开发数据库(MYSQL),我希望在某些时候加载新数据。我想删除所有表的内容。 删除所有表(包括具有外键约束的表)的内容的最佳方法是尽可能自动化。是否有截断全部/丢弃所有等效约束?
由于
答案 0 :(得分:29)
我认为你可以做到以下几点:
禁用外键约束检查
mysql> SET FOREIGN_KEY_CHECKS = 0;
截断表格
mysql> TRUNCATE MY_TABLE;
启用外键约束检查
mysql> SET FOREIGN_KEY_CHECKS = 1;
我更喜欢暂时禁用外键约束来删除/重新创建它们。
答案 1 :(得分:0)
如果你想要更好地截断所有表,我认为使用以前提取的数据库模式删除和创建数据库。或者你只需要两份相同的数据库 - 测试并清空。填写表后,只需删除测试数据库并复制空以进行测试。
答案 2 :(得分:0)
TRUNCATE(TABLE)tbl_name将截断单个表。您可以将其粘贴在脚本中,并使用所有表名循环遍历它。
http://dev.mysql.com/doc/refman/5.0/en/truncate.html
您可能也希望了解迁移,但我认为Alexey在那里有正确的方法。它与RoR在每次运行时处理重建测试数据库的方式非常相似。
答案 3 :(得分: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
。
如果你不想在命令提示符下输入你的密码(我从来没有),那么你需要在每次提示后复制并粘贴密码,这可能是几次,具体取决于表。