Bor*_*lis 18 mysql foreign-keys
我想重命名一个表中的列,该表是许多表的外键.显然,这只有在你删除约束时才有可能,正如我在这个链接中发现的那样.
我不想手动删除所有constratints有没有办法删除数据库中的所有外键约束?
我也试过SET FOREIGN_KEY_CHECKS=0;但我还是不能重命名这个专栏.
lop*_*san 31
您可以使用此SQL生成ALTER TABLES(!!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!!';
Run Code Online (Sandbox Code Playgroud)
它会像这样生成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;
...
Run Code Online (Sandbox Code Playgroud)
Aug*_*sto -4
执行以下查询
select * from information_schema.key_column_usage
Run Code Online (Sandbox Code Playgroud)
将显示数据库中存在的所有约束(包括列名、约束类型、表和架构)。您会注意到这些列:
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
Run Code Online (Sandbox Code Playgroud)
然后,如果您计划删除引用列的每个约束,您应该考虑REFERENCED_*列并运行如下所示的命令:
DELETE FROM information_schema.key_column_usage
WHERE
REFERENCED_TABLE_SCHEMA='myschema'
AND
REFERENCED_TABLE_NAME='mytable'
AND
REFERENCED_COLUMN_NAME='mycolumn'
Run Code Online (Sandbox Code Playgroud)
http://dev.mysql.com/doc/refman/5.1/en/key-column-usage-table.html
| 归档时间: |
|
| 查看次数: |
21192 次 |
| 最近记录: |