【问题标题】:Get ON DELETE ON UPDATE actions in foreign keys constraints在外键约束中获取 ON DELETE ON UPDATE 操作
【发布时间】:2013-04-23 07:06:07
【问题描述】:

我正在尝试获取外键更改中的操作(删除/更新时)。

我试图在 INFORMATION_SCHEMA.key_column_usage 中查看它:

SELECT * 
FROM `INFORMATION_SCHEMA`.`key_column_usage` 
WHERE `referenced_table_schema` = '{$this->dbName}'
AND `referenced_table_name` IS NOT NULL
AND `table_name` = '{$this->tableName}'

它显示了这样的东西:

0 => 
array (size=12)
  'CONSTRAINT_CATALOG' => string 'def' (length=3)
  'CONSTRAINT_SCHEMA' => string 'test' (length=4)
  'CONSTRAINT_NAME' => string 'profiles_ibfk_1' (length=15)
  'TABLE_CATALOG' => string 'def' (length=3)
  'TABLE_SCHEMA' => string 'test' (length=4)
  'TABLE_NAME' => string 'profiles' (length=8)
  'COLUMN_NAME' => string 'id' (length=2)
  'ORDINAL_POSITION' => string '1' (length=1)
  'POSITION_IN_UNIQUE_CONSTRAINT' => string '1' (length=1)
  'REFERENCED_TABLE_SCHEMA' => string 'test' (length=4)
  'REFERENCED_TABLE_NAME' => string 'users' (length=5)
  'REFERENCED_COLUMN_NAME' => string 'id' (length=2)

....

我也尝试过 INFORMATION_SCHEMA.TABLE_CONSTRAITS 并且得到了:

0 => 
array (size=6)
  'CONSTRAINT_CATALOG' => string 'def' (length=3)
  'CONSTRAINT_SCHEMA' => string 'test' (length=4)
  'CONSTRAINT_NAME' => string 'PRIMARY' (length=7)
  'TABLE_SCHEMA' => string 'test' (length=4)
  'TABLE_NAME' => string 'profiles' (length=8)
  'CONSTRAINT_TYPE' => string 'PRIMARY KEY' (length=11)

....

在 2 种情况下没有关于删除/更新操作的信息。

我能得到吗?如何?如果可以的话。

【问题讨论】:

    标签: mysql


    【解决方案1】:

    REFERENTIAL_CONSTRAINTS 信息架构中选择UPDATE_RULEDELETE_RULE

    SELECT CONSTRAINT_NAME, UPDATE_RULE, DELETE_RULE
    FROM   INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS
    WHERE  UNIQUE_CONSTRAINT_SCHEMA = '{$this->dbName}'
       AND REFERENCED_TABLE_NAME IS NOT NULL
       AND TABLE_NAME = '{$this->tableName}'
    

    据记载:

    UPDATE_RULEDELETE_RULE 的可能值为 CASCADESET NULLSET DEFAULTRESTRICTNO ACTION

    【讨论】:

      【解决方案2】:

      这取决于你想做什么。如果您只想在相关记录上更新外键,那么您正在寻找带有 CASCADE 选项的外键约束。请参阅this page 并通读有关级联的部分。如果您想对记录的 UPDATE/DELETE 执行更复杂的操作,则需要触发器。有关创建触发器的语法,请参阅 this page

      【讨论】:

        猜你喜欢
        • 2011-10-06
        • 1970-01-01
        • 2015-12-29
        • 2011-06-15
        • 1970-01-01
        • 2014-10-06
        • 2019-09-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多