Delete all foreign keys in database(MySql)
我想重命名一个表中的列,该表是许多表的外键。 显然,这只有在你删除约束时才有可能,正如我在这个链接中发现的那样。
我不想手动删除所有constratints有没有办法删除数据库中的所有外键约束?
我也试过
您可以使用此SQL生成ALTER TABLES(
1 2 3 4 |
它会像这样生成SQL:
1 2 3 4 | alter table viewpoint_test.answer_code DROP FOREIGN KEY fk_answer_code_codebook_item1; alter table viewpoint_test.answer_code DROP FOREIGN KEY fk_answer_code_questionary_answer1; alter table viewpoint_test.codebook DROP FOREIGN KEY codebook_ibfk_1; ... |
以下查询将自动构建正确的语法。
确保将实际的数据库模式名称放在
只需执行返回的每一行,所有
我将反向(加回来)作为练习给你。
1 2 3 |
如果您需要它独立于架构,您可以编写:
您可以尝试使用以下内容..
1 2 3 |
你也可以尝试参考Key.As像.....
1 2 3 4 | ALTER TABLE tableName DROP FOREIGN KEY fieldName; ADD FOREIGN KEY (newForignKeyFieldName) REFERENCES anotherTableName(reference_id); |
找到这个帖子后我还有一些问题,但我似乎找到了适合我的工作流程。
数据库删除
如果您使用的是MySQL Workbench,则需要通过执行以下3个步骤来关闭SAFE UPDATE:
开始清除数据库并启动新的步骤
(此MySQL脚本将为数据库中的每个表创建一个DELETE FROM脚本。)
SELECT concat('DELETE FROM ',table_schema,'.',table_name,';')
FROM information_schema.table_constraints
WHERE table_schema='!!TABLE_SCHEMA!!';
复制此输出并运行它。您可能需要逐行进行此操作。
(此MySql脚本将为数据库中的每个表创建一个ALTER TABLE _ DROP FOREIGN KEY脚本。)
SELECT concat('alter table ',table_schema,'.',table_name,' DROP FOREIGN KEY ',constraint_name,';')
FROM information_schema.table_constraints
WHERE constraint_type='FOREIGN KEY'
AND table_schema='!!TABLE_SCHEMA!!';
复制此输出并运行它。您可能需要逐行进行此操作。
完成此操作后,您应该能够运行DROP DATABASE脚本。
执行以下查询
将显示数据库中存在的所有约束(包括列名,约束类型,表和模式)。您会注意到这些列:
1 2 3 4 5 6 7 8 9 10 11 12 | CONSTRAINT_CATALOG CONSTRAINT_SCHEMA CONSTRAINT_NAME TABLE_CATALOG TABLE_SCHEMA TABLE_NAME COLUMN_NAME ORDINAL_POSITION POSITION_IN_UNIQUE_CONSTRAINT REFERENCED_TABLE_SCHEMA REFERENCED_TABLE_NAME REFERENCED_COLUMN_NAME |
然后,如果您计划删除引用列的每个约束,则应考虑REFERENCED_ *列并执行以下操作:
1 2 3 4 5 6 7 |
http://dev.mysql.com/doc/refman/5.1/en/key-column-usage-table.html