-- 安全删除所有表数据(保留结构)的存储过程
DELIMITER $$
CREATE PROCEDURE truncate_all_tables()
BEGIN
DECLARE done BOOLEAN DEFAULT FALSE;
DECLARE tableName VARCHAR(255);
DECLARE tableCursor CURSOR FOR
SELECT TABLE_NAME
FROM information_schema.tables
WHERE table_schema = DATABASE()
AND table_type = 'BASE TABLE';
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
SET FOREIGN_KEY_CHECKS = 0;
OPEN tableCursor;
truncate_loop: LOOP
FETCH tableCursor INTO tableName;
IF done THEN
LEAVE truncate_loop;
END IF;
-- 动态执行TRUNCATE
SET @truncateSql = CONCAT('TRUNCATE TABLE ', tableName, '
');
PREPARE stmt FROM @truncateSql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END LOOP;
CLOSE tableCursor;
SET FOREIGN_KEY_CHECKS = 1;
END
$$
DELIMITER ;
-- 执行存储过程
CALL truncate_all_tables();
-- 清理存储过程(可选)
DROP PROCEDURE IF EXISTS truncate_all_tables;