56,677
社区成员
发帖
与我相关
我的任务
分享
mysql> DELIMITER $$
mysql>
mysql> DROP PROCEDURE IF EXISTS `Proc_app_DelRef`$$
Query OK, 0 rows affected (0.00 sec)
mysql>
mysql> CREATE PROCEDURE `Proc_app_DelRef`(
-> IN p_tablename VARCHAR(50) -- 表名
-> )
-> BEGIN
-> DECLARE done INT DEFAULT 0;
-> DECLARE v_constraintname VARCHAR(100);
-> DECLARE cur CURSOR FOR
-> SELECT constraint_name FROM information_schema.REFERENTIAL_CONSTRAINT
S
-> WHERE CONSTRAINT_schema=DATABASE() AND table_name=p_tablename;
-> DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
-> OPEN cur;
-> REPEAT
-> FETCH cur INTO v_constraintname;
-> IF NOT done THEN
-> SET @sqlcmd = CONCAT('alter table ',p_tablename,' drop fo
reign key ', v_constraintname);
-> select @sqlcmd;
-> PREPARE stmt FROM @sqlcmd;
-> EXECUTE stmt;
-> DEALLOCATE PREPARE stmt;
-> END IF;
->
-> UNTIL done END REPEAT;
-> CLOSE cur;
-> END$$
Query OK, 0 rows affected (0.00 sec)
mysql>
mysql> DELIMITER ;
mysql> call Proc_app_DelRef('tx');
Query OK, 0 rows affected (0.02 sec)
mysql> drop table tx;
Query OK, 0 rows affected (0.02 sec)
mysql> create table tx (
-> id int primary key,
-> c1 int,
-> c2 int,
-> c3 int,
-> CONSTRAINT c1 FOREIGN KEY f1 (c1) REFERENCES t1(id),
-> CONSTRAINT c2 FOREIGN KEY f2 (c2) REFERENCES t2(id),
-> CONSTRAINT c3 FOREIGN KEY f3 (c3) REFERENCES t3(id)
-> ) engine=innodb;
Query OK, 0 rows affected (0.06 sec)
mysql> call Proc_app_DelRef('tx');
+------------------------------------+
| @sqlcmd |
+------------------------------------+
| alter table tx drop foreign key c1 |
+------------------------------------+
1 row in set (0.00 sec)
+------------------------------------+
| @sqlcmd |
+------------------------------------+
| alter table tx drop foreign key c2 |
+------------------------------------+
1 row in set (0.12 sec)
+------------------------------------+
| @sqlcmd |
+------------------------------------+
| alter table tx drop foreign key c3 |
+------------------------------------+
1 row in set (0.51 sec)
Query OK, 0 rows affected (0.56 sec)
mysql>
DELIMITER $$
DROP PROCEDURE IF EXISTS `Proc_app_DelRef`$$
CREATE DEFINER=`root`@`%` PROCEDURE `Proc_app_DelRef`(
IN p_tablename VARCHAR(50) -- 表名
)
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE v_constraintname VARCHAR(100);
DECLARE cur CURSOR FOR
SELECT constraint_name FROM information_schema.REFERENTIAL_CONSTRAINTS
WHERE CONSTRAINT_schema=DATABASE() AND table_name=p_tablename;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
OPEN cur;
REPEAT
FETCH cur INTO v_constraintname;
IF v_constraintname IS NOT NULL THEN
SET @sqlcmd = CONCAT('alter table ',p_tablename,' drop foreign key ', v_constraintname);
PREPARE stmt FROM @sqlcmd;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SLEEP(10000) ; ---- changed by ACMAIN
END IF;
UNTIL done END REPEAT;
CLOSE cur;
END$$
DELIMITER ;