指示有关数据更改的外键

时间:2016-01-27 14:07:43

标签: mysql

您好我在table 2使用外键引用。假设用户已更改table 1中的某些数据,这些数据在table 2中称为外键。是否有任何方式(或某些标记)在table 2中指示table 1中的数据已更改。如果可能,请建议我。我正在使用MySql数据库。

2 个答案:

答案 0 :(得分:0)

答案取决于您使用的数据库引擎的类型以及您在上述表中定义的引用操作

这些是您可以施加的所有参照约束类型:

CASCADE
SET NULL
RESTRICT
NO ACTION 
SET DEFAULT

以下是一个例子:

CREATE TABLE parent (
    id INT NOT NULL,
    PRIMARY KEY (id)
) ENGINE=INNODB;

CREATE TABLE child (
    id INT, 
    parent_id INT,
    INDEX par_ind (parent_id),
    FOREIGN KEY (parent_id) 
        REFERENCES parent(id)
        ON DELETE CASCADE
) ENGINE=INNODB;

来源:https://dev.mysql.com/doc/refman/5.6/en/create-table-foreign-keys.html

答案 1 :(得分:0)

先生。怀特的回答是正确的,可以自动更新/删除,但不会被标记为"标记"更新的信息,这是我解释问题的方式。如果你想设置另一个" flag"的值当table 1中的行更新时,您应该查看触发器。

请注意the docs说:

  

级联外键操作不会激活触发器。

因此,使用table 1关键字设置CASCADE不会激活示例中外键表(table 2)中的任何自定义代码 - 您必须将触发器置于{ {1}}而不是。

the docs开始,可能的触发事件是:

  • table 1 - 每当插入新行时(通过INSERTINSERTLOAD_DATA等)
  • REPLACE - 每当修改一行时
  • UPDATE - 每当删除一行时(通过DELETEDELETE,但 REPLACEDROP_TABLE)< / LI>

可以参加TRUNCATE_TABLEBEFORE活动。在您的情况下,AFTER是合适的,因为它只会在触发它的语句成功时执行。触发器的主体可以是语句或存储例程,其内容当然取决于您的实际表结构。

快速搜索提出了一些关于使用此类行为定义触发器的问题,这可能会为您指定特定设置的正确方向:

有关使用触发器的更多信息:https://dev.mysql.com/doc/refman/5.6/en/triggers.html