我有一个删除所有表的脚本。
SET FOREIGN_KEY_CHECKS = 0;
SET @tables = NULL;
SELECT GROUP_CONCAT(table_schema, '.', table_name) INTO @tables
FROM information_schema.tables
WHERE table_schema = 'mydb';
SET @tables = CONCAT('DROP TABLE ', @tables);
PREPARE stmt FROM @tables;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SET FOREIGN_KEY_CHECKS = 1;
它只能完美运行一次 - 当至少存在一个表时。第二次运行给我一个错误:
您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行 SQL.sql 9 1 的“NULL”附近使用正确的语法
我正在尝试使用 IF 语句,但它仍然不起作用:
IF @tables IS NOT NULL THEN
SET @tables = CONCAT('DROP TABLE ', @tables);
PREPARE stmt FROM @tables;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END IF;
您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行 SQL.sql 8 1 的“if @tables IS NOT NULL THEN SET @tables = CONCAT('DROP TABLE ', @tables)”附近使用正确的语法
在这种情况下使用 IF 的正确方法是什么?