[英]MySQL - Query for foreign key CASCADE behaviors
是否可以查询MySQL以确定FK的CASCADE
行为? 目前,我正在这样做:
SELECT
COLUMN_NAME,
REFERENCED_TABLE_NAME,
REFERENCED_COLUMN_NAME
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE
TABLE_SCHEMA = 'my_db'
AND
TABLE_NAME = 'my_table'
AND
REFERENCED_COLUMN_NAME IS NOT NULL
太好了-它为我提供了在my_table
克隆上以编程方式创建类似FK所需的几乎所有信息。 不幸的是, INFORMATION_SCHEMA
似乎没有有关FK的CASCADE
行为的信息。 我没有想知道为什么需要这些信息的细节,我只想知道:有什么方法可以查询它?
编辑 -在人们开始建议之前,就复制FK而言,在我的情况下无法CREATE TABLE LIKE ...
知道了表的名称之后,您可以使用SHOW CREATE TABLE命令来获取有关约束的确切行为。 然后,您将不得不进行一些解析,这将比在MySQL中更容易在应用程序端完成。
根据@Barmar在评论中的建议(谢谢!),这就是我最终要做的事情:
SELECT
U.COLUMN_NAME,
U.REFERENCED_TABLE_NAME,
U.REFERENCED_COLUMN_NAME,
C.UPDATE_RULE,
C.DELETE_RULE
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE U
LEFT JOIN INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS C
ON U.CONSTRAINT_NAME = C.CONSTRAINT_NAME
WHERE
U.TABLE_SCHEMA = 'my_db'
AND
U.TABLE_NAME = 'my_table'
AND
U.REFERENCED_COLUMN_NAME IS NOT NULL
这给了我正确重新创建外键所需的一切:
+---------------------+-------------+-----------------------+------------------------+-------------+-------------+
| TABLE_NAME | COLUMN_NAME | REFERENCED_TABLE_NAME | REFERENCED_COLUMN_NAME | UPDATE_RULE | DELETE_RULE |
+---------------------+-------------+-----------------------+------------------------+-------------+-------------+
| my_table | item_id | item | id | CASCADE | CASCADE |
+---------------------+-------------+-----------------------+------------------------+-------------+-------------+
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.