繁体   English   中英

MySQL-查询外键CASCADE行为

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM