1
我的问题是我们如何删除或删除在MySQL数据库中的表中定义的所有约束。是否有任何可能的方法用单个LOC来完成,或者我们是否需要编写指令来单独去除每种类型的约束。任何人都可以帮助我。一个小脚本也会因为忘记表格的所有约束名称然后将其删除而变得过于繁琐。谢谢。删除MySQL中的所有表限制
我的问题是我们如何删除或删除在MySQL数据库中的表中定义的所有约束。是否有任何可能的方法用单个LOC来完成,或者我们是否需要编写指令来单独去除每种类型的约束。任何人都可以帮助我。一个小脚本也会因为忘记表格的所有约束名称然后将其删除而变得过于繁琐。谢谢。删除MySQL中的所有表限制
也许您在3年后仍在寻找答案。可能不会,但是这是一个删除所有表约束(主键,外键,唯一性,检查)的过程。它还从列中删除auto_increment和NOT NULL。
提供此代码不变并应被视为高度危险的,因为它会改变很多列和表:
DROP PROCEDURE IF EXISTS dropAllConstraintsForAllTablesInSchema;
DELIMITER ///
CREATE PROCEDURE dropAllConstraintsForAllTablesInSchema(IN param_table_schema VARCHAR(255))
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE dropCommand VARCHAR(255);
DECLARE dropCur CURSOR FOR
SELECT
concat('alter table ', table_schema, '.', table_name, ' MODIFY ', column_name, ' ', column_type, ' ', replace(extra, 'auto_increment', ''), ';')
FROM information_schema.COLUMNS
WHERE table_schema = param_table_schema
AND (IS_NULLABLE = FALSE OR EXTRA REGEXP 'auto_increment')
UNION
SELECT CASE constraint_type
WHEN 'FOREIGN KEY'
THEN concat('alter table ', table_schema, '.', table_name, ' DROP FOREIGN KEY ', constraint_name, ';')
WHEN 'UNIQUE'
THEN concat('alter table ', table_schema, '.', table_name, ' DROP INDEX ', constraint_name, ';')
WHEN 'PRIMARY KEY'
THEN concat('alter table ', table_schema, '.', table_name, ' DROP PRIMARY KEY;')
WHEN 'CHECK'
THEN concat('alter table ', table_schema, '.', table_name, ' DROP CHECK ', constraint_name, ';')
END
FROM information_schema.table_constraints
WHERE constraint_type IN ('FOREIGN KEY', 'UNIQUE', 'PRIMARY KEY', 'CHECK')
AND table_schema = param_table_schema;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN dropCur;
read_loop: LOOP
FETCH dropCur
INTO dropCommand;
IF done
THEN
LEAVE read_loop;
END IF;
SET @sdropCommand = dropCommand;
PREPARE dropClientUpdateKeyStmt FROM @sdropCommand;
EXECUTE dropClientUpdateKeyStmt;
DEALLOCATE PREPARE dropClientUpdateKeyStmt;
END LOOP;
CLOSE dropCur;
END///
DELIMITER ;
要使用这个程序,只需运行:
call dropAllConstraintsForAllTablesInSchema('table_schema');
再次,请谨慎使用。它可能会对列定义有一些未经检验的副作用。
也许这篇文章有你需要的解决方案吗? http://stackoverflow.com/questions/1323462/is-it-possible-to-drop-all-foreign-key-constraints-on-a-table-at-once-in-mysql-5 – StaticVoid