所以,直到今天我们还在测试我们的网站。现在我们想切换到下一个级别,我们需要清空数据库才能做到这一点。这意味着我们希望回到起点,拥有所有表格,但没有数据。
有很多表格和交叉引用,因此逐表截断可能不是最好的选择。
通过谷歌搜索和询问朋友,我猜想正确的解决方案与架构有关(更准确地说是导出架构)。这是否适合我们的情况?如果是,执行此清理的必要步骤是什么?
Debian 和 mysql 5.1
答案1
你应该能够做到这一点mysqldump
mysqldump -u root -p --no-data dbname > schema.sql
然后你可以使用 mysql 清理数据库
mysql -u root -p dbname < schema.sql
默认情况下,schema.sql 文件将包含执行所需操作所需的必要命令。
如果你想测试一下,你可以这样做
mysql -u root -p -e 'create database test;'
mysql -u root -p test < schema.sql
然后检查测试数据库是否具有您期望的结构等。
答案2
关于截断具有外键关系的表,只需尝试禁用 DDL 来检查这一点,如StackOverflow.com 上的这个答案(连接参数):
SET FOREIGN_KEY_CHECKS=0;
然后将其与此查询结合起来生成查询列表,以使其截断所有表。
SELECT
CONCAT('TRUNCATE TABLE ', table_schema, '.', table_name, ' ;')
FROM
information_schema.tables
WHERE
table_schema = 'name_of_your_db'
ORDER BY
table_name DESC;