Mysql 删除当前选定数据库中所有表的索引
我试图删除外键生成的所有索引,为此我编写了一个存储过程,但MySQL服务器抱怨语法,过程如下:Mysql 删除当前选定数据库中所有表的索引,mysql,stored-procedures,nested-loops,Mysql,Stored Procedures,Nested Loops,我试图删除外键生成的所有索引,为此我编写了一个存储过程,但MySQL服务器抱怨语法,过程如下: DROP PROCEDURE IF EXISTS usp_DropIndexOfTables; DELIMITER $$ CREATE PROCEDURE usp_DropIndexOfTables() BLOCK1: BEGIN DECLARE finished INTEGER DEFAULT 0; DECLARE v_table varchar(200) DEFAULT ""; DEClA
DROP PROCEDURE IF EXISTS usp_DropIndexOfTables;
DELIMITER $$
CREATE PROCEDURE usp_DropIndexOfTables()
BLOCK1: BEGIN
DECLARE finished INTEGER DEFAULT 0;
DECLARE v_table varchar(200) DEFAULT "";
DEClARE table_cursor CURSOR FOR
SELECT TABLE_NAME from information_schema.tables where TABLE_SCHEMA=(SELECT DATABASE());
DECLARE CONTINUE HANDLER FOR NOT FOUND SET finished = 1;
OPEN table_cursor;
LOOP1: loop
FETCH table_cursor INTO v_table;
IF finished = 1 THEN
CLOSE table_cursor;
leave LOOP1;
END IF;
BLOCK2: BEGIN
DECLARE v_finished INTEGER DEFAULT 0;
DECLARE v_index varchar(200) DEFAULT "";
DEClARE index_cursor CURSOR FOR
SELECT INDEX_NAME FROM INFORMATION_SCHEMA.STATISTICS
WHERE TABLE_SCHEMA = (SELECT DATABASE()) AND INDEX_NAME in ( SELECT CONSTRAINT_NAME FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS
WHERE CONSTRAINT_SCHEMA = (SELECT DATABASE()) AND TABLE_NAME = v_table);
DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_finished = 1;
OPEN index_cursor;
LOOP2: loop
FETCH index_cursor INTO v_index;
IF v_finished = 1 THEN
close index_cursor;
leave LOOP2;
END IF;
SET @v_query = CONCAT('DROP INDEX ',v_index,' ON ', v_table);
PREPARE stmt FROM @v_query;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END loop LOOP2
END BLOCK2;
END loop LOOP1;
END BLOCK1;
END$$
DELIMITER ;
CALL usp_DropIndexOfTables()
我不知道我做错了什么
错误
mysql> source dropIndexs.sql;
Query OK, 0 rows affected, 1 warning (0.00 sec)
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'END BLOCK2;
END loop LOOP1;
END BLOCK1;
END' at line 39
ERROR 1305 (42000): PROCEDURE dbname.usp_DropIndexOfTables does not exist
运行过程时出现了什么错误???@BK435添加了有问题的错误。“END loop LOOP2”后面没有分号。您是否尝试过在它之后放置一个并重新运行创建过程?很好的捕获,谢谢,但它现在显示
mysql>source dropIndexs.sql;查询正常,0行受影响(0.00秒)查询正常,0行受影响(0.00秒)错误1064(42000):您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以了解在第1行查询“END”附近使用的正确语法,好的,受影响的0行(0.43秒)
,如果我猜的话,因为该错误告诉我的不多,除了第1行的“END”有问题外,但没有结尾……我会看看您的END$$分隔符代码>行…我认为有点不对劲…请仔细检查语法,确保您正在结束您认为正在结束的内容。。。