【问题标题】:Get information to create ALTER TABLE ADD FOREIGN KEY获取信息以创建 ALTER TABLE ADD FOREIGN KEY
【发布时间】:2013-01-19 23:25:55
【问题描述】:

如何获取信息以更新已经存在的外键..

在 phpmyadmin 中更新外键引用时,此查询将发送到服务器

ALTER TABLE `dimension` ADD FOREIGN KEY (`test_id`) REFERENCES `db`.`test`
(`id`) ON DELETE CASCADE ON UPDATE RESTRICT;

但是我如何获得状态ON DELETEON UPDATE 以发送和更新alter table 查询?

【问题讨论】:

    标签: mysql foreign-keys


    【解决方案1】:

    你不能。您必须删除现有的外键约束并添加一个新约束。

    但是,您可以从INFORMATION_SCHEMA 获取现有的reference_option

    SELECT CONSTRAINT_NAME, UNIQUE_CONSTRAINT_NAME, UPDATE_RULE, DELETE_RULE
    FROM   INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS
    WHERE  CONSTRAINT_SCHEMA = DATABASE()
       AND UNIQUE_CONSTRAINT_SCHEMA = DATABASE()
       AND TABLE_NAME = 'dimension'
       AND REFERENCED_TABLE_NAME = 'test'
    

    或者来自SHOW CREATE TABLE

    SHOW CREATE TABLE dimension
    

    【讨论】:

    • 是的,但是如何从现有密钥中检索 ON DELETE 和 ON UPDATE 状态?
    • 在选择列表中添加了CONSTRAINT_NAME,因为您可能有多个 FK 从一个表到另一个表。
    • @eggyal 您可能还想在条件中添加AND UNIQUE_CONSTRAINT_SCHEMA = DATABASE()(即引用表的数据库(此处为test)和选择列表中的UNIQUE_CONSTRAINT_NAME(即引用的唯一(或主)键(在此处进行测试)。
    • @ypercube:一切都是真的!谢谢你考虑得这么透彻。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-26
    • 2014-03-17
    • 2012-07-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多