假设“table_users”上的“user_id”字段是10个其他表上10个外键的主键。我想在“table_users”上重命名主键字段,但它不允许我重命名它,因为有10个其他表中的10个外键链接到它。我可以知道如何知道10个表中哪个有外键?什么是用于显示具有外键的10个表的SQL代码?
我正在使用phpMyAdmin和InnoDB引擎。我知道SHOW ENGINE INNODB STATUS
可以完成这项工作,但它每次都会显示1个表格,这意味着我需要重复重命名主键字段10次并运行SHOW ENGINE INNODB STATUS
10次以找出所有10个表格表。找出10个表是否还有其他更好的解决方案?
答案 0 :(得分:2)
您可以尝试查询INFORMATION_SCHEMA
数据库:
select ku.*
from INFORMATION_SCHEMA.table_constraints tc
INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE ku ON
(tc.CONSTRAINT_NAME = ku.CONSTRAINT_NAME and tc.CONSTRAINT_SCHEMA =
ku.CONSTRAINT_SCHEMA )
where constraint_type='FOREIGN KEY' and ku.REFERENCED_TABLE_NAME =
'your_table_name'
答案 1 :(得分:0)
作为mysql root用户,您可以使用
解决此问题SET foreign_key_checks = 0;
这将禁用约束系统,并允许您更改表定义。当然,所有外键约束都将被打破,需要删除并重新创建。
SET foreign_key_checks = 1;
将重新打开约束系统。
Mysql还有一个可以查询的数据字典。 This previous question完全涵盖了这一点,所以我不打算重复这些信息。