是否存在在一次操作中截断数据库中所有表的查询(命令)?我想知道我是否可以用一个查询做到这一点。
当前回答
这里,我知道这里
SELECT Concat('TRUNCATE TABLE ',table_schema,'.',TABLE_NAME, ';')
FROM INFORMATION_SCHEMA.TABLES where table_schema in ('databasename1','databasename2');
如果不能删除或更新父行:外键约束失败
如果存在外键指向您试图删除/截断的表的表,就会发生这种情况。
在截断表之前,你需要做的是:
SET FOREIGN_KEY_CHECKS=0;
截断您的表并将其更改回
SET FOREIGN_KEY_CHECKS=1;
使用这段PHP代码 $truncate = mysql_query("SELECT Concat(' truncate TABLE ',table_schema,'. "',TABLE_NAME, ';')作为table_query FROM INFORMATION_SCHEMA。table where table_schema in ('databasename')"); 而($ truncateRow =作用(截断)美元){ mysql_query()美元truncateRow [' tables_query ']); } ? > 查看详情 链接
其他回答
这里,我知道这里
SELECT Concat('TRUNCATE TABLE ',table_schema,'.',TABLE_NAME, ';')
FROM INFORMATION_SCHEMA.TABLES where table_schema in ('databasename1','databasename2');
如果不能删除或更新父行:外键约束失败
如果存在外键指向您试图删除/截断的表的表,就会发生这种情况。
在截断表之前,你需要做的是:
SET FOREIGN_KEY_CHECKS=0;
截断您的表并将其更改回
SET FOREIGN_KEY_CHECKS=1;
使用这段PHP代码 $truncate = mysql_query("SELECT Concat(' truncate TABLE ',table_schema,'. "',TABLE_NAME, ';')作为table_query FROM INFORMATION_SCHEMA。table where table_schema in ('databasename')"); 而($ truncateRow =作用(截断)美元){ mysql_query()美元truncateRow [' tables_query ']); } ? > 查看详情 链接
如果使用SQL server 2005,有一个隐藏的存储过程,允许您对数据库中的所有表执行一个或一组命令。下面是如何用这个存储过程调用TRUNCATE TABLE:
EXEC [sp_MSforeachtable] @command1="TRUNCATE TABLE ?"
这里有一篇很好的文章进一步阐述。
然而,对于MySql,你可以使用mysqldump并指定——add-drop-tables和——no-data选项来删除和创建所有忽略数据的表。是这样的:
mysqldump -u[USERNAME] -p[PASSWORD] --add-drop-table --no-data [DATABASE]
Mysqldump使用指南
我不确定,但我认为有一个命令可以使用,你可以复制数据库的模式到新的数据库,一旦你这样做了,你可以删除旧的数据库,这之后,你可以再次复制数据库模式到旧的名称。
这对我很管用。修改数据库、用户名和密码。
mysql -Nse 'show tables' -D DATABASE -uUSER -pPWD | while read table; do echo "SET FOREIGN_KEY_CHECKS = 0;drop table \`$table\`;SET FOREIGN_KEY_CHECKS = 1;"; done | mysql DATABASE -uUSER -pPWD
这将输出截断所有表的命令:
SELECT GROUP_CONCAT(Concat('TRUNCATE TABLE ',table_schema,'.',TABLE_NAME) SEPARATOR ';') FROM INFORMATION_SCHEMA.TABLES where table_schema in ('my_db');