SELECT GROUP_CONCAT(Concat('TRUNCATE TABLE ',table_schema,'.',TABLE_NAME) SEPARATOR ';') FROM INFORMATION_SCHEMA.TABLES where table_schema in ('my_db');
mysql> select group_concat('truncate',' ',table_name,';') from information_schema.tables where table_schema="db_name" into outfile '/tmp/a.txt';
mysql> /tmp/a.txt;
溶液2)
- Export only structure of a db
- drop the database
- import the .sql of structure
--编辑----
earlier in solution 1, i had mentioned concat() instead of group_concat() which would have not returned the desired result
TB=$( mysql -Bse "show tables from DATABASE" );
for i in ${TB};
do echo "Truncating table ${i}";
mysql -e "set foreign_key_checks=0; set unique_checks=0;truncate table DATABASE.${i}; set foreign_key_checks=1; set unique_checks=1";
sleep 1;
done
klarsen@Chaos:~$ mysql -Bse "select concat(table_name, ' depends on ', referenced_table_name)
from information_schema.referential_constraints
where constraint_schema = 'cpm'
order by referenced_table_name"
klarsen@Chaos:~$ TB=$( mysql -Bse "show tables from cpm" ); for i in ${TB}; do echo "Truncating table ${i}"; mysql -e "set foreign_key_checks=0; set unique_checks=0;truncate table cpm.${i}; set foreign_key_checks=1; set unique_checks=1"; sleep 1; done
C:\>for /F "tokens=*" %a IN ('mysql -Bse "show tables" cpm') do mysql -e "set foreign_key_checks=0; set unique_checks=0; truncate table %a; foreign_key_checks=1; set unique_checks=1" cpm
SELECT Concat('TRUNCATE TABLE ',table_schema,'.',TABLE_NAME, ';')
FROM INFORMATION_SCHEMA.TABLES where table_schema in ('databasename1','databasename2');
$truncate = mysql_query("SELECT Concat('TRUNCATE TABLE ',table_schema,'.',TABLE_NAME, ';') as tables_query FROM INFORMATION_SCHEMA.TABLES where table_schema in ('databasename')");
while($truncateRow=mysql_fetch_assoc($truncate)){
mysql_query($truncateRow['tables_query']);
}
?>
27条答案
按热度按时间cwdobuhd1#
下面的mysql查询本身将生成一个查询,该查询将截断给定数据库中的所有表。它绕过外键:
ikfrs5lh2#
没有。没有一个命令可以一次截断所有mysql表。您必须创建一个小脚本来逐个截断表。
裁判:http://dev.mysql.com/doc/refman/5.0/en/truncate-table.html
xoshrz7s3#
如果使用SQLServer2005,则有一个隐藏的存储过程,允许您对数据库中的所有表执行一个或一组命令。这是你的电话
TRUNCATE TABLE
使用此存储过程:这是一篇很好的文章,可以作进一步的阐述。
但是,对于mysql,可以使用mysqldump并指定
--add-drop-tables
以及--no-data
删除和创建忽略数据的所有表的选项。这样地:来自dev.mysql的mysqldump使用指南
hc8w905p4#
我知道这并不完全是一个命令,但是可以通过以下步骤在phpmyadmin中实现所需的结果:
选择(全部)要删除的表(全部选中)
从“with selected:”列表中选择“drop”/“truncate”
在确认页面(“do you really want:”)复制查询(红色背景的所有内容)
在顶部点击sql并写:“setforeign\u key\u checks=0;”然后粘贴先前复制的查询
点击“go”
其思想是从数据库中快速获取所有表(只需5秒和2次单击即可完成),但首先禁用外键检查。没有cli,也没有删除数据库并再次添加它。
bnl4lu3b5#
这将打印命令以截断所有表:
wwwo4jvm6#
ms sql server 2005+(删除打印以便实际执行…)
如果您的数据库平台支持信息模式视图,则获取以下查询的结果并执行它们。
对于mysql,请尝试以下操作:
在concat中添加分号使其更易于使用,例如在mysql工作台中使用。
jslywgbw7#
溶液1)
溶液2)
--编辑----
ckocjqey8#
截断mysql示例上的多个数据库表
使用查询结果截断表
注意:可能会出现以下错误:
如果有外键引用您试图删除/截断的表的表,就会发生这种情况。
在截断表之前,您只需执行以下操作:
截断表并将其改回
qpgpyjmq9#
--
大卫,
感谢您花时间格式化代码,但这是应该如何应用的。
-库尔特
在unix或linux设备上:
确保你在一个bash shell中。这些命令将从命令行运行,如下所示。
注:
我将凭据存储在~/.my.cnf文件中,因此不需要在命令行中提供凭据。
注:
cpm是数据库名称
我只展示了每个命令的一小部分结果。
查找外键约束:
外部审批系统取决于审批请求
地址取决于客户
客户身份取决于客户
外部标识取决于客户
凭证取决于客户
电子邮件地址取决于客户
批准请求取决于客户
客户状态取决于客户
客户形象取决于客户
列出表格和行数:
截断表:
截断表地址
截断表审批\u外部\u系统
截断表审批请求
截断表国家
截断表凭据
截断表customer
截断表customer\u identification
截断表customer\u映像
截断表customer\u status
验证它是否工作:
在windows框上:
注:
cpm是数据库名称
cuxqih2110#
删除(即删除表)
截断(即空表)
k10s72fa11#
下面是我用来清除表的代码片段。只需更改$conn info和表名。
6l7fqoea12#
因为我知道这里
如果无法删除或更新父行:外键约束失败
如果有外键引用您试图删除/截断的表的表,就会发生这种情况。
在截断表之前,您只需执行以下操作:
截断表并将其改回
使用此php代码
在此处查看详细信息链接
de90aj5v13#
我发现那个截断表。。即使在nocheck约束all之后,外键约束也有问题,所以我使用delete-from语句。这并不意味着不会重置标识种子,您可以始终添加dbcc checkident来实现这一点。
在运行之前,我使用下面的代码将用于截断数据库中所有表的sql打印到消息窗口。这只会让你更难犯错。
ycl3bljg14#
我不确定,但我认为有一个命令,您可以使用它将数据库的模式复制到新数据库中,完成此操作后,您可以删除旧数据库,然后您可以再次将数据库模式复制到旧名称中。
ergxz8rk15#
按以下方式使用phpmyadmin:
数据库视图=>检查所有(表)=>空
如果要忽略外键检查,可以取消选中显示以下内容的框:
[]启用外键检查
您需要运行至少4.5.0或更高版本才能获取此复选框。
不是很好,但是嘿,很管用!