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

来源:互联网 发布:java patternlayout 编辑:程序博客网 时间:2024/06/08 08:22
  • 利用外键关系,我们可以在一个表里声明与另一个表里的某个索引相关联的索引,外键不仅在行的插入操作中很有用,在删除和更新操作中也很有用处,外键可以帮助我们维护数据的一致性,并且它们用起来也很方便,在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);

这里写图片描述
这里写图片描述

  • 接下来可以写一些测试的
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;

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

0 0