我需要清除所有库存表.
我试过这个:
SELECT 'TRUNCATE TABLE ' + TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME LIKE 'inventory%'
Run Code Online (Sandbox Code Playgroud)
但我得到这个错误:
Truncated incorrect DOUBLE value: 'TRUNCATE TABLE ' Error Code 1292
Run Code Online (Sandbox Code Playgroud)
如果这是正确的方法,那么我做错了什么?
ʞɔı*_*ɔıu 61
使用concat:
SELECT concat('TRUNCATE TABLE `', TABLE_NAME, '`;')
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME LIKE 'inventory%'
Run Code Online (Sandbox Code Playgroud)
这当然只会生成您需要自己复制和运行的SQL.
小智 7
我知道它已经是一个较旧的帖子但是以下示例对于需要从linux命令行或shell脚本中截断多个表的人有用:
mysql -p<secret> --execute="SELECT concat('TRUNCATE TABLE ', TABLE_NAME, ';') FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = '<database>' AND FIND_IN_SET(TABLE_NAME,'your_table_a,your_table_b,your_table_c')" | sed 1d | mysql -p<secret> <database>
Run Code Online (Sandbox Code Playgroud)
鉴于您需要用自己的值替换括号中的字符串,它对我有用.同时将'your_table_a,your_table_b,your_table_c'替换为以逗号分隔的表格列表.;)
小智 6
SELECT 'SET FOREIGN_KEY_CHECKS = 0;'
UNION
SELECT DISTINCT concat( "TRUNCATE TABLE ", TABLE_NAME, ";" )
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'mydbname'
UNION
SELECT 'SET FOREIGN_KEY_CHECKS = 1;'
Run Code Online (Sandbox Code Playgroud)