MySQL第二章学习总结

一、数据完整性

1.数据完整性的定义

数据的完整性是指数据的精确性和可靠性。

2.4类数据完整性

1.实体完整性

2.域完整性

3.引用完整性

4.自定义完整性

3.数据完整性在MySQL中的体现

1.主键约束分为单字段约束和多字段约束。

2.语法:

列名数据类型 PRIMARY KEY[默认值]

2.1定义完所有列之后设置主键,语法规则:

[CONSTRAINT 约束名]PRIMARY KEY(列名)

2.2设置多个字段为主键:

PRIMARY KEY([列名1,列名2......列名N])

3.设置字段为自动增长

自动增长的作用:
问题:为数据表设置主键约束后,每次插入记录时,如果插入的值已经存在,会插入失败。
如何解决:为主键生成自动增长的值。

自动增长的语法:
字段名 数据类型 AUTO_INCREMENT;

使用须知:

1.一个表中只能有一个自动增长字段;
2.该字段的数据类型是整数类型;
3.必须定义为键,如 UNIQUE KEY、 PRIMARY KEY;
4.若为自动增长字段插入NULL、0、 DEFAULT或在插入时省略该字段,该字段就会使用自动增长值;
5.若插入的是一个具体值,则不会使用自动增长值;
6.自动增长值从1开始自增,每次加1
7.若插入的值大于自动增长的值,则下次插入的自动增长值会自动使用最大值加1;
8.若插入的值小于自动增长值,则不会对自动增长值产生影响;
9.使用 DELETE删除记录时,自动增长值不会减小或填补空缺.

4.外键约束

MySQL外键约束(FOREIGN KEY)
MySQL 外键约束(FOREIGN KEY)用来在两个表的数据之间建立链接,它可以是一列或者多列。一个表可以有一个或多个外键。

外键对应的是参照完整性,一个表的外键可以为空值,若不为空值,则每一个外键的值必须等于另一个表中主键的某个值。

外键是表的一个字段,不是本表的主键,但对应另一个表的主键。定义外键后,不允许删除另一个表中具有关联关系的行。

外键的主要作用是保持数据的一致性、完整性。例如,部门表 tb_dept 的主键是 id,在员工表 tb_emp5 中有一个键 deptId 与这个 id 关联。

 

主表(父表):对于两个具有关联关系的表而言,相关联字段中主键所在的表就是主表。

从表(子表):对于两个具有关联关系的表而言,相关联字段中外键所在的表就是从表。

5.非空约束

字段名数据类型 null not 

注意: 默认情况下所有的类型的值为NULL,包括INT,FLOAT等数据类型默认情况下也为null

非空约束只能出现在表对象的列上,也就是只能定义为列级约束,并且非空约束不可以定义在表对象的所有列的后面,也就是不能定义为表级约束

6.默认约束

字段名数据类型 default 默认值

7.唯一约束

字段名数据类型 UNIQUE

数据库设计

二、数据库设计

1.三大范式


设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小。目前数据库有六种范式:第一范式、第二范式、第三范式、巴斯-科德范式、第四范式、第五范式(又称完美范式)。

 第一范式:列不可再分,具有原子性,即数据库表的每一列都是不可分割的原子数据项,不能是集合、数组等非原子数据项。

 第二范式:在满足第一范式的前提下,每一列都依赖于主键,表中的每一个字段都依赖于主键。

 第三范式:在满足第二范式的前提下,每一列都直接依赖于主键,而不能通过其他列来间接的依赖主键。 三大范式只是一般设计数据库的基本理念,可以建立冗余较小、结构合理的数据库。如果有特殊情况,当然要特殊对待,数据库设计最重要的是看需求跟性能,需求>性能>表结构。所以不能一味的去追求范式建立数据库。

2.字段类型

字段类型相关表字段是用来存储数据内容大小的,其大小的设置跟存储到磁盘分配的磁盘块多少有直接关系。

char(n) :固定长度类型,char(10),当你输入"abc"三个字符的时候,它们占的空间还是10个字节,其他7个是空字节。其优点是存取数据效率高,缺点是占用空间大,以空间换时间,适用场景:存储密码的md5值,固定长度的,使用char非常合适。

varchar(n) :可变长度,存储的值是每个值占用的字节再加上一个用来记录其长度的字节的长度。从空间上考虑varcahr比较合适;从效率上考虑char比较合适。

float(m,d):单精度浮点数, m显示长度,d表示小数点位数,占用空间4个字节。例如:float(4,2) 表示的范围是-99.99~99.99。

decimal(m,d):m显示长度,d表示小数点位数。例如:decimal(5,2) 表示范围:-999.99 ~ 999.99。往数据库字段类型为float(10.8)、decimal(10,8)分别插入数据10.12345678,10.12345678,然后执行select * from 表,会发现float类型的字段显示数据为10.12345695,而decimal字段显示的数据为10.12345678,float单精度小数位数小于decimal,decimal如果不指定精度,默认为(10,0)。

double:浮点类型有两种,分别是单精度浮点数(float)和双精度浮点数(double),定点类型只有一种,就是decimal,可以存储16位的十进制数,占空间8字节

3.删除


DELETE 对数据一行一行的删除,将每行的删除操作记录在日志中保存,以便进行回滚操作。

TRUNCATE 一次性地从表中删除所有的数据不记录操作日志,数据不能恢复,删除的过程中不会激活与表有关的删除触发器。执行速度快。

DROP 语句将表所占用的空间全释放掉。TRUNCATE和DELETE只删除数据, DROP则删除整个表(结构和数据)。

4.表与表的关系


 一对一, 一对多,多对多
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值