个人学习历程之菜鸟初体验SQL外键和引用完整性

  • 利用外键关系,我们可以在一个表里声明与另一个表里的某个索引相关联的索引,外键不仅在行的插入操作中很有用,在删除和更新操作中也很有用处,外键可以帮助我们维护数据的一致性,并且它们用起来也很方便,在MySQL里,InnoDB存储引擎提供了对外键的支持。今天作为菜鸟的我,即将开启学习如何使用外键和引用完整性的历程。
  • InnoBD存储引擎会通过这些规则来保证:在外键关系里不会出现不匹配的情况。这就是所谓哦的参照完整性(referential integrity).
  • 以上两点只是笼统的介绍了一下,感觉还没有步入正题啊。。继续~~
    -外键语法
[CONSTRANINT constraint_name]
FOREIGN KEY [fk_name](index_columns)
    REFERENCES tbl_name (index_columns)
    [ON DELETE action]
    [ON UPDATE action]
    [MATCH FULL | MATCH PARTIAL | MATCH SIMPLE]

(上面的单词如果不去写成小写,那真是一脸懵,还得去查一查)目前InnoDB存储引擎还不支持MATCH子句,其他的子句慢慢来就懂了。接着看~

  • CONSTRAINT(constraint约束):它会为外键约束提供一个名字,如果省略它,那么InnoDB存储引擎会创建一个名字。(感觉意义不大)
  • FOREING KEY :它会列出子表里的索引列,这些列必须与父表里的索引值相匹配。(个人觉得这就是一个外键的关键字,说的很高大上)
  • PEFERENCES:它会列出父表及其索引列的名字,让子表里的外键可以引用它们。(这个属性就和上面的FOREIGN配合使用,简单的概括可以说成上面的FOREIGN定义子表中的某列外键,PEFERENCES定义父表中的可提供引用的列)
  • ON DELETE action
  • ON UPDATE action 这两个属性说的是父表执行删除或者更新操作是,子表相应的那列也将会受到影响。
    (目前就这几个属性了,感觉不是很难,看看例子)

  • SQL代码

CREATE TABLE parent(
    par_id INT NOT NULL,
    PRIMARY KEY (pri_id)
)ENGINE = INNODB;
CREATE TABLE child(
    par_id INT NOT NULL,
    child_id INT NOT NULL,
    PRIMARY KEY (par_id,child_id),
    FOREIGN KEY (par_id) REFERENCES parent (par_id)
        ON DELETE CASCADE
        ON UPDATE CASCADE
)ENGINE=INNODB;
INSERT INTO parent (par_id) VALUES (1),(2),(3);
INSERT INTO child (par_id,child_id) VALUES(1,1),(1,2);
INSERT INTO child (par_id,child_id) VALUES(2,1),(2,2),(2,3);
INSERT INTO child (par_id,child_id) VALUES(3,1),(3,2);

个人学习历程之菜鸟初体验SQL外键和引用完整性_第1张图片
个人学习历程之菜鸟初体验SQL外键和引用完整性_第2张图片

  • 接下来可以写一些测试的
INSERT INTO child (pri_id,child_id) VALUES (4,1);
DELETE FROM parent WHERE pri_id=1;
UPDATE parent SET pri_id=100 WHERE pri_id=2;

结果表明删除或者更新父表中的元素,子表也会跟着受影响,在子表中进行更新是必须遵循外键约束。

你可能感兴趣的:(mysql)