单元7索引与数据完整性约束讲解.ppt
文本预览下载声明
替代键约束 在关系模型中,替代键像主键一样,是表的一列或一组列,它们的值在任何时候都是唯一的。替代键是没有被选做主键的候选键。定义替代键的关键字是UNIQUE。 【例7.11】 在表book_copy1中将图书编号作为主键,书名列定义为一个替代键。 CREATE TABLE book_copy1 ( 图书编号 varchar(20) NOT NULL, 书名 varchar(20) NOT NULL UNIQUE, 出版日期 date NULL, PRIMARY KEY(图书编号) ); 替代键和主键的区别 在MySQL中替代键和主键的区别主要有以下几点。 (1)一个数据表只能创建一个主键。但一个表可以有若干个UNIQUE键,并且它们甚至可以重合,例如,在C1和C2列上定义了一个替代键,并且在C2和C3上定义了另一个替代键,这两个替代键在C2列上重合了,而MySQL允许这样。 (2)主键字段的值不允许为NULL,而UNIQUE字段的值可取NULL,但是必须使用NULL或NOT NULL声明。 (3)一般创建PRIMARY KEY约束时,系统会自动产生PRIMARY KEY索引。创建UNIQUE约束时,系统自动产生UNIQUE索引。 引用完整性 河南新乡 赵可以 0010016 河南新乡 张丽鹃 0010015 江西南昌 雷铜 0010014 湖南新田 吴兰 0010013 山东定陶 李山 0010012 … 地址 姓名 学号 98 0010021 数学 × 约束方法:外键约束 科目 学号 分数 … 数学 0010012 88 数学 0010013 74 语文 0010012 67 语文 0010013 81 数学 0010016 98 主表(父表) 参照表(子表) 参照完整性约束 在本书所举例的Bookstore数据库中,有很多规则是和表之间的关系有关的。例如,只有图书目录表中有的图书才可以销售,因此,在Sell表中的所有图书(由图书编号来标识)必须是Book表有的图书,也就是说存储在Sell表中的所有图书编号必须存在于Book表的图书编号列中。同样Sell表中的所有身份证号也必须出现在Members表的身份证号列中。这种类型的关系就是参照完整性约束(referential integrity constraint)。参照完整性约束是一种特殊的完整性约束,实现为一个外键。所以Sell表中的图书编号列和身份证号列都可以定义为一个外键。可以在创建表或修改表时定义一个外键声明。 定义外键的reference_definition语法格式如下: REFERENCES 表名 [(列名 [(长度)] [ASC | DESC],...)] [ON DELETE {RESTRICT | CASCADE | SET NULL | NO ACTION}] [ON UPDATE {RESTRICT | CASCADE | SET NULL | NO ACTION}] RESTRICT:当要删除或更新父表中被参照列上在外键中出现的值时,拒绝对父表的删除或更新操作。如要当要删除xs表中081102记录时,因为cj中还有081102记录,拒绝对xs表的删除操作。 CASCADE:从父表删除或更新行时自动删除或更新子表中匹配的行。如从xs表更新081102学号为801102时自动更新cj表中学号为081102行为801102 。 学号 姓名 … 081102 程明 081103 王燕 … …. …. 学号 姓名 成绩 081102 程明 80 081103 王燕 90 …. Xs表(父表) Cj表(子表) 参照完整性约束说明 SET NULL:当从父表删除或更新行时,设置子表中与之对应的外键列为NULL。当从xs表删除081103行时,设置cj表中081103项为NULL。 NO ACTION:NO ACTION意味着不采取动作,就是如果有一个相关的外键值在被参考的表里,删除或更新父表中主要键值的企图不被允许,和RESTRICT一样。 SET DEFAULT:作用和SET NULL一样,只不过SET DEFAULT是指定子表中的外键列为默认值。 如果没有指定动作,两个参照动作就会默认地使用RESTRICT。 学号 姓名 … 081102 程明 081103 王燕 … …. …. 学号 姓名 成绩 081102 程明 80 081103 王燕 90 …. Xs表(父表) Cj表(子表) 参照完整性约束说明 参照完整性约束举例 外键目前只可以用在那些使用InnoDB存储引擎创建的表中,对于其他类型的表,MySQL服务器能够解析CREATE TABLE语句中的FOR
显示全部