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

Mysql 截断所有表(大多数表都有约束)。如何暂时放下它们,mysql,mysql-management,Mysql,Mysql Management,我有一个开发数据库(MYSQL),我希望在某个时候加载新数据。我想删除所有表的内容。 尽可能自动化地删除所有表(包括具有外键约束的表)的内容的最佳方法是什么。是否存在“全部截断/删除所有等效约束” 如果您想以我认为的更好的方式截断所有表,请使用以前提取的数据库模式删除并创建数据库,谢谢。或者,您可以只复制同一数据库的两个副本-test和empty。填写完表后,只需删除测试数据库并将其复制为空即可进行测试。TRUNCATE(TABLE)tbl_name将截断单个表。您可以将其粘贴到脚本中,并使用所

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


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

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


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

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

  • 禁用外键约束检查

    mysql> SET FOREIGN_KEY_CHECKS = 0;
    
    mysql> SET FOREIGN_KEY_CHECKS = 1;
    
  • 截断你的桌子

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

    mysql> SET FOREIGN_KEY_CHECKS = 0;
    
    mysql> SET FOREIGN_KEY_CHECKS = 1;
    

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

    以下是我在命令提示符下的操作:

     mysql -Nse 'show tables' DATABASE_NAME | while read table; do mysql -e "SET FOREIGN_KEY_CHECKS = 0; TRUNCATE table $table" DATABASE_NAME; done
    
    问题是,如果需要身份验证,则需要在两个
    mysql
    命令之后添加
    -u用户名-pYOURPASSWORD


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

    使用
    PHPMYADMIN
    进行此操作的任何人的快速评论。如果您在一个SQL行中执行上述所有语句,它就可以工作。如果你试着一次做一件,那是行不通的。当然,我确信它可以在@Pascal Thivent显示的常规
    mysql
    命令行上运行。