删除数据库中所有外键(MySQL的)(Delete all foreign keys in data

2019-07-18 19:17发布

我想在一个表的外键到许多表重命名列。 很显然,如果你删除的约束,因为我在这找到了,这是唯一可能的联系 。

我不想删除所有constratints手动是有办法删除数据库中的所有外键约束?

我也曾尝试SET FOREIGN_KEY_CHECKS=0; 但我仍然无法重命名列。

Answer 1:

执行以下查询

select * from information_schema.key_column_usage

会告诉你所有的约束(与列名,约束类型,表和模式)中存在的数据库。 你会发现这些列:

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_ *列和运行是这样的:

DELETE FROM information_schema.key_column_usage 
WHERE 
    REFERENCED_TABLE_SCHEMA='myschema'
    AND
    REFERENCED_TABLE_NAME='mytable'
    AND
    REFERENCED_COLUMN_NAME='mycolumn'

http://dev.mysql.com/doc/refman/5.1/en/key-column-usage-table.html



Answer 2:

您可以使用此SQL生成变更表( !!YOUR_SCHEMA_HERE!!需要由您的模式所取代):

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='!!YOUR_SCHEMA_HERE!!';

它会生成SQL这样的:

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;
...


Answer 3:

您可以尝试使用下面的像..

ALTER TABLE tableName
DROP FOREIGN KEY fieldName;
ADD FOREIGN KEY (newForignKeyFieldName);

你也可以尝试与参考Key.As喜欢.....

ALTER TABLE tableName
DROP FOREIGN KEY fieldName;
ADD FOREIGN KEY (newForignKeyFieldName)
REFERENCES anotherTableName(reference_id);


Answer 4:

下面的查询将自动生成正确的语法。 确保你在把你真正的数据库架构名WHERE条件。 只执行每行返回,所有的FOREIGN KEYS将不复存在。

我离开反向(加回)作为练习。

SELECT CONCAT("alter table ", TABLE_NAME," drop foreign key ", CONSTRAINT_NAME,"; ") AS runMe
FROM information_schema.key_column_usage 
WHERE TABLE_SCHEMA='MY_SCHEMA_NAME' AND CONSTRAINT_NAME <> 'PRIMARY';

如果您需要的是独立的模式,你可以写: TABLE_SCHEMA=DATABASE()来获得当前活动DB名称



Answer 5:

我仍然有一些问题,发现这个线程后,但我似乎找到了最适合我的工作的工作流程。

数据库删除

如果你正在使用MySQL Workbench中,你将需要把安全更新关闭通过执行以下3个步骤:

  1. MySQL工作台>首选项> SQL编辑器>(设置下)
  2. 关闭安全UPDATE关闭
  3. 然后注销您的连接并重新连接

步骤,开始清除数据库并启动新

  1. 删除表中的所有数据

(这MySQL的脚本将创建一个删除脚本数据库中的每个表。)

SELECT concat('DELETE FROM ',table_schema,'.',table_name,';') FROM information_schema.table_constraints WHERE table_schema='!!TABLE_SCHEMA!!';

复制此输出,并运行它。 您可能需要此行由行。

  1. 从表中删除所有外键

(这个MySQL脚本将创建呐ALTER为数据库中的每个表的表_ 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脚本。



文章来源: Delete all foreign keys in database(MySql)