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