On Delete Cascade&的区别在mysql中更新Cascade

时间:2014-08-22 06:00:27

标签: mysql database phpmyadmin foreign-keys foreign-key-relationship

我在MySQL数据库中有两个表 - parentchild。我试图根据父表向我的子表添加外键引用。 ON UPDATE CASCADEON DELETE RESTRICT

之间是否存在显着差异?

我的父表

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

我的问题是:以下sql查询之间有什么区别。

1)

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;

2)

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

以下查询中是否有任何错误?

3)

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

这些查询(1,2& 3)是什么意思?它们是一样的???

格拉西亚斯。

1 个答案:

答案 0 :(得分:12)

<强> on delete cascade

  

删除父记录时会删除所有子记录,所以   父母被删除时将没有子记录。

<强> on update cascade

  

当父记录为id时,它将更新子记录parent_id   更改。在极少数情况下,我们使用更新级联

     

例如: - 假设您的父ID是4位数,并且由于之后的扩展   你需要把它改成10位数。在这种情况下,ON UPDATE CASCADE会   允许您更改主键值和任何具有的表   对值的外键引用将相应更改。