是否存在在一次操作中截断数据库中所有表的查询(命令)?我想知道我是否可以用一个查询做到这一点。
当前回答
我不确定,但我认为有一个命令可以使用,你可以复制数据库的模式到新的数据库,一旦你这样做了,你可以删除旧的数据库,这之后,你可以再次复制数据库模式到旧的名称。
其他回答
以这种方式使用phpMyAdmin:
Database View => Check All (tables) =>空
如果你想忽略外键检查,你可以取消选中下面的复选框:
[]启用外键检查
您至少需要运行4.5.0或更高版本才能获得此复选框。
它不是MySQL CLI-fu,但是,嘿,它工作!
<?php
// connect to database
$conn=mysqli_connect("localhost","user","password","database");
// check connection
if (mysqli_connect_errno()) {
exit('Connect failed: '. mysqli_connect_error());
}
// sql query
$sql =mysqli_query($conn,"TRUNCATE " . TABLE_NAME);
// Print message
if ($sql === TRUE) {
echo 'data delete successfully';
}
else {
echo 'Error: '. $conn->error;
}
$conn->close();
?>
这是我用来清除一个表的代码片段。只需更改$conn info和TABLE_NAME。
我发现最简单的方法是像下面这样做,只需用自己的表名替换表名。重要的是确保最后一行永远是 设置FOREIGN_KEY_CHECKS = 1;
SET FOREIGN_KEY_CHECKS=0;
TRUNCATE `table1`;
TRUNCATE `table2`;
TRUNCATE `table3`;
TRUNCATE `table4`;
TRUNCATE `table5`;
TRUNCATE `table6`;
TRUNCATE `table7`;
SET FOREIGN_KEY_CHECKS=1;
如果使用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使用指南
MS SQL Server 2005+(删除打印以实际执行…)
EXEC sp_MSforeachtable 'PRINT ''TRUNCATE TABLE ?'''
如果您的数据库平台支持INFORMATION_SCHEMA视图,则获取以下查询的结果并执行它们。
SELECT 'TRUNCATE TABLE ' + TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
试试MySQL:
SELECT Concat('TRUNCATE TABLE ', TABLE_NAME) FROM INFORMATION_SCHEMA.TABLES
在Concat中添加一个分号可以使它更容易使用,例如在mysql工作台中使用。
SELECT Concat('TRUNCATE TABLE ', TABLE_NAME, ';') FROM INFORMATION_SCHEMA.TABLES