MySQL学习笔记(二)

表约束按作用分类

表的约束按作用分类为表级约束,和列级约束

列级约束:

列级约束可以理解为边创建字段属性边约束

CREATE TABLE (
字段名0 数据类型 NOT NULL ,    ---列级约束  
字段名1 数据类型 PRIMARY KEY,    ---列级约束   
字段名2 数据类型 CHECK(条件),    ---列级约束  
……
);

表级约束:

则表级约束为创建完字段属性后,单独约束字段

CREATE TABLE (
字段名0 数据类型 注释,
字段名1 数据类型 ,
字段……
……
PRIMARY KEY(字段1),
UNIQUE (字段0),
……
);

表的数据完整性

数据完整性就是保证数据库中存储的数据是正确、有效和相容的。
为了避免不符合规范的数据进入数据库,在对数据进行增、删、改等操作时,数据库管理系统会自动按照一定的约束条件对数据进行监测。
在这里插入图片描述

其中关系模型必须满足的完整性约束条件是实体完整性和参照完整性

关系模型
表中的每行就是一个元组,也就是说一个元组是一行记录。

在关系模型中,若某一属性或属性组的值能唯一地标识一个元组,则这个属性称为候选键

  • 候选键具有唯一性:关系中的任意两个元组,即其候选键中的属性或属性组的的值是不同的;
  • 候选键具有最小化:组成候选键的属性组中,任意属性丢不能从属性组中删除,否则将破坏唯一性规则。

一个关系中用于唯一标识元组的候选键称为主键,主键可以是某个属性也可以是多个属性的集合(即复合主键)。

关系模型的逻辑结构是一组关系模式的集合


实体完整性

实体完整性(又叫行完整性):表中每一行的记录是唯一的。
通过主键约束、和唯一性约束来实现。

主键约束 PRIMARY KEY
1.在列中声明主键(列级约束):
字段名 PRIMARY KEY       
或
2.在创建列的属性后 声明哪个字段是主键 (表级约束)
PRIMARY KEY (字段名1,字段名2……)      --复合主键

一个表中只能定义一个主键,主键唯一且不为NULL;
主键可以是某个属性,也可以是多个属性的组合。

唯一性约束 UNIQUE
在创建表时 定义某个字段为唯一性约束:
1.列级约束:
CREATE TABLE 表名(
……,
字段名 数据类型 UNIQUE,
……
);
或
2.表级约束:
CREATE TABLE 表名(
……,
字段名1 数据类型 ,
……,
UNIQUE(字段名1)
);

空约束和非空约束 NOT NULL

一般字段的取值默认的即为空约束,可以取空。
非空约束则定义字段为NOT NULL:

CREATE TABLE 表名(
……,
字段名 数据类型 NOT NULL,
……
);
自增约束 AUTO_INCREAMENT

一般情况下如表中的序列号可以设置为自增约束

  • 一个表中只能有一个自增字段;
  • 自增字段默认从1开始,逐渐加一;若在添加数据时未给自增字段或者给定一个>或=0且<或=当前自增字段最大值,则自动为设定当前自增字段最大值+1为所添加自增字段的值。
CREATE TABLE 表名(
……,
字段名 数据类型 AUTO_INCREAMENT,
……
);

参照完整性

参照完整性就是从表中的外键和主表中的主键之间的引用规则来约束两张表之间的参照关系。

主表:被参照的表
从表:含外键且参照其他表的表
外键:从表中的参照列表称为外键,外键需要与被参照的主表中相应的主键的数据类型完全一致,名称可以不同。
被参照列:主表中的被参照列通常为主表的主键(也可以时非主键的唯一键)
  • 若表中的某个字段定义为外键后,该字段可以为空值,也可以等于主表中相应被参照列已有的值。
外键约束 FOREIGN KEY

外键可以是一个字段也可以是一组字段

FOREIGN KEY (外键字段名1,……)
REFERENCES 被参照的主表名 (被参照列)
[ON DELETE reference_option ]   ---删除规则 ,可不写
[ON UPDATE reference_option ]   ---更新规则,可不写
reference_option :                        ---参考选项
	RESTRICT | CASCADE | SETNULL | NOACTION

删除规则与更新规则的选项相同

选项删除规则选项含义更新规则选项含义
RESTRICT删除主表被参照列的值时,若该值已经被从表引用,则禁止该删除操作。更新主表被参照列的值时,若该值已经在从表中被引用,则禁止该更新操作。
CASCADE若删除主表被参照列的值,从表中引用该值的所有行也被删除。若更新主表被参照列的值,从表中引用该值的所有行也被更新。
NO ACTION作用与RESTRICT相同作用与RESTRICT相同
SET NULL删除主表被参照列的值时,若该值已经被从表引用,则从表中引用该值的所有行设置为NULL。更新主表被参照列的值时,若该值已经被从表引用,则从表中引用该值的所有行设置为NULL。

域完整性

域完整性就是指对表中的字段属性进行约束,即包括数据类型、取值范围、精度等约束,如varchar(长度)、int(0)……以确保数据有效。

用户定义的完整性

用户定义的完整性可以通过 唯一性约束 UNIQUE空约束 NULL 和 非空约束 NOT NULL、默认约束 DEFAULT、检查约束 CHECK 来实现。

默认约束 DEFAULT

设置某字段为默认约束,若在添加数据时没有为该字段指定取值则会自动设置为相应的默认值。

CREATE TABLE 表名(
字段名 数据类型 DEFAULT("默认字段的值"),
……
);
检查约束 CHECK

检查约束用于限制字段的取值范围。

CREATE TABLE 表名(
字段名 INT CHECK(字段名>0),
sex VARCHAR(2) NOT NULL CHECK(sex IN('男','女')),
……
);

概念模型的E-R图的表示

实体的联系有 1:1一对一联系1:n 一对多联系m:n 多对多联系
通过实体、实体的属性、实体之间的联系来得到E-R概念模型

在E-R图中:
实体用长方形表示,代表数据模型中的数据对象
属性用椭圆形表示,代表实体所具有的属性
联系用菱形表示,代表实体之间的联系

例:

一个图书借阅管理数据库要求提供下述服务:
(1)可随时查询书库中现有书籍的品种、数量与存放位置。所有各类书籍均可由书号唯一标识。
(2)可随时查询书籍借还情况,包括借书人单位、姓名、借书证号、借书日期和还书日期。我们约定:任何人可借多种书,任何一种书可为多个人所借,借书证号具有唯一性。
(3)当需要时,可通过数据库中保存的出版社的电报编号、电话、邮编及地址等信息向相应出版社增购有关书籍。我们约定,一个出版社可出版多种书籍,同一本书仅为一个出版社出版,出版社名具有唯一性。
根据以上情况和假设,试作如下设计: (1)构造满足需本的E-R图。(2)转换为等价的关系模式结构。

E-R图表示方法

E-R

关系模式

关系模式是对关系的描述,即表结构。

E-R图转换为关系模式

学习参考

1:1 一对一联系

  • 第一个方法:可以单独对应一个关系模式,由各实体的主码构成关系模式,而关系模式的主码可以是任一个实体集的主码。而实体中属性照常写就可以了。
  • 第二个方法:实体中的属性照常写,然后将一方实体集的主码加到另一方实体集对应的关系模式中。

t3
如上图所示,实体“档案”与实体“学生”是1对1联系,将E-R图转换为关系模式:
第一种方法
档案(档案号,档案位置)
学生(学号,年龄,姓名)
归档(档案号,学号) 归档(学号,档案号)
主键:档案号 外键:学号 or 主键:学号 外键:档案号

第一种方法
档案(档案号,档案位置)
学生(学号,年龄,姓名,档案号
主键:学号 外键:档案号

学生(学号,年龄,姓名)
档案(档案号,档案位置,学号
主键:档案号 外键:学号

1:n 一对多联系

  • 第一个方法:同一对一的方法一是差不多的,只是对应的关系模式中,其主码不再是任一实体的主码就可以,而是必须指定n端的主码为关系模式的主码。
  • 第二个方法:同一对一的方法二也是差不多的,但是值得强调的是,必须将1端的主码加到n端的关系模式中,而且n端的主码仍然为该关系模式中的主码。

t2

如上图所示,实体“出版社”与实体“图书”是1对多联系,将E-R图转换为关系模型:

第一种方法(单独对应一个实体集):
出版社(出版社名 ,电报编号,邮编,地址,电话)
图书(书号 ,书名,数量,位置)
出版(书号 ,出版社名)
外键:书号
第二种方法(对应到多端):
图书(书号 ,书名,数量,位置)
出版社(出版社名 ,电报编号,邮编,地址,电话,书号
主键:出版社名


m:n 多对多联系

  • 其转换原则为:每个实体集对应一个关系模式,对于多对多的联系,其单独对应一个实体集,该实体集的主码由各实体集的主码共同构成。

t1
如上图所示,实体“借书人”与实体“图书”是多对多联系,将E-R图转换为关系模型:

借书人(借书证号 ,姓名,单位)
图书(书号 ,书名,数量,位置)
借阅(借书证号,书号,借书日期,还书日期)

外键:借书证号,书号 主键:借书日期


综上:例题(2)转换为等价的关系模式结构为:

出版社(出版社名 ,电报编号,邮编,地址,电话)
图书(书号 ,书名,数量,位置)
出版(书号 ,出版社名)外键:书号
借书人(借书证号 ,姓名,单位)
借阅(借书证号,书号,借书日期,还书日期)外键:借书证号,书号 主键:借书日期

  • 39
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值