2011-09-18 45 views
1

假设“table_users”上的“user_id”字段是10个其他表中的10个外键的主键。我想重命名“table_users”上的主键字段,但它不允许我重命名它,因为有10个其他表中的10个外键被链接到它。我可以知道如何知道10个表中哪些具有外键?什么是SQL代码来显示有外键的10个表?sql列出了主键的所有外键

我正在使用phpMyAdmin和InnoDB引擎。我知道SHOW ENGINE INNODB STATUS可以做的工作,但它告诉我1个表中的每个时间,意味着我需要重复命名主键字段为10倍和运行SHOW ENGINE INNODB STATUS 10次,找出所有的10桌。有没有其他更好的解决方案来找出10个表格?

回答

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' 
+0

omg!有用!非常感谢你。 – zac1987

0

随着MySQL的root用户,可以使用

SET foreign_key_checks = 0; 

这将禁用约束系统,将让你改变你的表定义解决此问题得到。当然,从那里你所有的外键约束将被打破,并需要被删除和重新创建。

SET foreign_key_checks = 1; 

将重新打开约束系统。

MySQL还具有可查询的数据字典。这在This previous question完全覆盖,所以我不打算重复任何信息。

+0

我已经试过你的建议。我点击数据库名称> Table_Users> SQL>'SET FOREIGN_KEY_CHECKS = 0;'。然后我重命名Table_Users上的主字段(user_id)。它仍然没有让我重新命名它。为什么?链接ü显示我返回错误“您键入的URL不再存在。” – zac1987