一、约束(constraint)
数据库约束是为了保证数据的完整性(正确性)而实现的一套机制
- 创建表时添加
- 创建表后添加
- 删除 alter table 表名 drop constraint 约束名;
主键约束(PK)primary key唯一且非空
alter table Student add constraint PK_Student primary key(sId)
其中constraint 表示约束,PK_Student为约束名,primary key(sId)指定为哪一列添加主键约束,其中的sId表示添加约束的字段。
唯一约束(UQ)unique唯一,允许为空,即可以出现null值,但只能出现一次
alter table Student add constraint UQ_Student_sNo unique(sNo)
unique(sNo)中的sNo表示添加unique约束的字段名
默认约束(DF)default默认值
alter table Student add constraint DF_Student_sSex default('男') for sSex
为student表中的sSex字段设置默认值为‘男’,即当该字段为填入数据时,数据库将自行为其加上数据内容为‘男’的数据
其中DF_Student_sSex为默认约束名
注:以上创建的主键约束、唯一约束均存在与数据库的‘ 键’目录下,而默认约束在位于‘约束’目录下
检查约束(CK)check范围以及格式限制
alter table Student add constraint CK_Student_sSex check (sSex='男' or sSex='女')
为student表中的sSex字段添加内容检查约束,只允许添加的内容为‘男’或者是‘女’
外键约束(FK)foreign key用来保证两张表之间数据一致性和完整性
alter table student add constraint FK_Student_sClassId foreign key (sClassId) references Class(cId)
- 添加约束后:外键的值可以为null,可以重复,但不能是另外一张表不存在的数据
- 添加约束后,外键指向的表(dept)不能先删除,如果需要删除,要么删除外键约束,要么先删除存在外键的表(emp)
- 添加约束后,外键指向的数据不能先删除,必须先删除子表中对应的数据
- 外键的值通常指向另外一张表的主键
- 使用外键必须两张表使用相同的引擎(innodb),myisam不支持外键
- create table emp(字段名...,constraint 约束名 foreign key(字段名) references 关联表名(关联的字段名));
提到外键,不得不提的是级联删除以及级联修改
alter table Student
add constraint FK_Student_sClassId foreign key (sClassId) references Class(cId)
--级联删除
on delete cascade
--级联修改
on update cascade
即当删除主表中的数据时,子表中与其有关的数据都将被删除。因此,此外键的创建方法在使用时需谨慎考虑
二、自增 (auto_increment)
- 当自增字段的值为null时会自动赋值并自增
- 以表中曾出现的最大值+1
- delete删除数据自增数值不减
- delete删除所有数据,自增值在原来基础上继续+1
- truncate删除所有数据,自增值清零
三、注释 (comment)
- 在创建表的时候可以通过comment对字段进行描述
四、事务
事务是数据库中执行sql语句的最小工作单元,在同一个事务中的sql语句要么同时成功,要么同时失败.
事务的ACID特性
- Atomicity:原子性
- Consistency:一致性
- Isolation:隔离性
- Durability:持久性
mysql中事务的指令(mysql默认sql语句是自动提交的)
- 查看自动提交的状态 show variables like '%autocommit%';
- 设置自动提交的状态 set autocommit=0/1;(0关1开)
- 提交 commit
- 回滚 rollback (执行rollback会回滚到上次提交的点或者关闭自动提交时的点)
- 保存回滚点 savepoint s1
- 回滚到某个点 rollback to s1
五、表的关联关系
一对一:
- 有两张表A和B,A表中有一条数据对应B表中的一条数据称为一对一关系
- 应用场景: 用户表和用户信息扩展表,商品表和商品信息扩展
-
在从表中添加一个字段记录主表的id,主表中的id 称为主键, 从表中记录主表id的字段称为外键,主键用来表示数据的唯一性,外键用来和其它表建立关系.
一对多
- AB两张表中A表中一条数据对应B表中多条数据,并且B表中一条数据对应A表中一条数据,两张表的关系称为一对多.
- 应用场景:部门和员工,商品和分类等
- 一对多的两张表,在多的表中添加一个字段记录另外一张表的id.
多对多
- AB两张表,A表中的一条数据对应B表的多条数据,同时B表的一条数据对应A表的多条数据,这种关系称为多对多
- 应用场景: 老师表和学生表,用户表和角色表
- 需要创建一个关系表,在关系表中记录两个表的id.
自关联
- 在一张表中有一个字段指向当前表的id,这种称为自关联
- 应用场景:当保存的数据有层级关系并且不确定有多少层的时候使用自关联.