在MySQL数据库中,是否有可能截断所有表?如果有,请提供查询语句。
在MySQL数据库中,是否有可能截断所有表?如果有,请提供查询语句。
继续从 @Pablo 的问题谈起,我的问题是管道符号无法连接 - 我想将其限制在单个数据库中,并且只使用特定的数据表
SELECT CONCAT('truncate table ',table_name,';')
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = '<<YOUR-DB-NAME>>'
AND TABLE_TYPE = 'BASE TABLE';
select 'truncate table ' || table_name || ';'
from INFORMATION_SCHEMA.TABLES;
然后将结果保存到脚本并运行。
另一个可能性是:
完成。
如果只运行查询,您就会理解我想表达的意思。
这里提供一个存储过程,可以将您的数据库重置为零
CREATE DEFINER=`root`@`localhost` PROCEDURE `reset_database`(DB_NAME VARCHAR(100))
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE tableName VARCHAR(100);
DECLARE cur CURSOR FOR SELECT table_name FROM INFORMATION_SCHEMA.tables WHERE table_schema = DB_NAME AND table_type = 'BASE TABLE';
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN cur;
SET FOREIGN_KEY_CHECKS = 0;
read_loop: LOOP
FETCH cur INTO tableName;
IF done THEN LEAVE read_loop; END IF;
SET @s = CONCAT('truncate table ',tableName);
PREPARE stmt1 FROM @s;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;
END LOOP;
SET FOREIGN_KEY_CHECKS = 1;
CLOSE cur;
END;
无法使用单个 SQL 查询实现。
可能会出现由于外键约束而截断失败的情况。 如果您仍然想强制截断,则可以选择将所有表用于截断,如Cristiana Pereira所建议的。
然后,在以下窗口中,不要单击“截断”,而是单击“查看SQL”。 按照以下步骤执行:
set foreign_key_checks = 0;
set foreign_key_checks = 1;