我在MySQL数据库中有两个表 - parent
,child
。我试图根据父表向我的子表添加外键引用。 ON UPDATE CASCADE
和ON 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)是什么意思?它们是一样的???
格拉西亚斯。
答案 0 :(得分:12)
<强> on delete cascade
强>
删除父记录时会删除所有子记录,所以 父母被删除时将没有子记录。
<强> on update cascade
强>
当父记录为id时,它将更新子记录parent_id 更改。在极少数情况下,我们使用更新级联
例如: - 假设您的父ID是4位数,并且由于之后的扩展 你需要把它改成10位数。在这种情况下,ON UPDATE CASCADE会 允许您更改主键值和任何具有的表 对值的外键引用将相应更改。