假设"table_users“上的"user_id”字段是其他10个表上10个外键的主键。我想要重命名"table_users“上的主键字段,但它不允许我重命名它,因为有来自10个其他表的10个外键链接到它。我可以知道如何知道这10个表中哪一个有外键吗?显示包含外键的10个表的sql代码是什么?
我使用的是phpMyAdmin和InnoDB引擎。我知道SHOW ENGINE INNODB STATUS
可以完成这项工作,但它每次显示一个表,这意味着我需要重复重命名主键字段10次,并运行SHOW ENGINE INNODB STATUS
10次才能找到所有10个表。有没有其他更好的解决方案来找出这10个表?
发布于 2011-09-19 02:24:24
您可以尝试查询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'
发布于 2011-09-19 01:55:07
作为mysql root用户,您可以使用以下命令解决此问题
SET foreign_key_checks = 0;
这将禁用约束系统,并允许您更改表定义。当然,从那时起,所有的外键约束都将被打破,并且需要删除并重新创建。
SET foreign_key_checks = 1;
将重新打开约束系统。
Mysql也有一个可以查询的数据字典。这在This previous question中有完整的报道,所以我不会重复这些信息。
https://stackoverflow.com/questions/7463221
复制相似问题