截断所有表(大多数表都有约束)。如何暂时放弃它们

时间:2009-09-30 17:30:35

标签: mysql mysql-management

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

由于

4 个答案:

答案 0 :(得分:29)

我认为你可以做到以下几点:

  1. 禁用外键约束检查

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

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

    mysql> SET FOREIGN_KEY_CHECKS = 1;
    
  4. 我更喜欢暂时禁用外键约束来删除/重新创建它们。

答案 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

如果你不想在命令提示符下输入你的密码(我从来没有),那么你需要在每次提示后复制并粘贴密码,这可能是几次,具体取决于表。