介绍一下数据库的三范式
**第一范式:**指的是数据库中表的属性不能再分割。也就是这个字段只有一个值,不能再分为其他的字段。
举个例子:
id | 用户名 | 地址 |
---|---|---|
1 | 张三 | 浙江省杭州市西湖区 13122221234 |
上述的表就不符合第一范式,比如地址栏可以分为省,市,区,手机号
我们可以将表分割为
id | 用户名 | 省 | 市 | 区 | 手机号 |
---|---|---|---|---|---|
1 | 张三 | 浙江省 | 杭州市 | 西湖区 | 13122221234 |
第二范式: 在符合第一范式的基础上,表中的字段必须依赖全部主键而非部分主键。
举个例子
商品名称 | 供应商名称 | 价格 | 重量 | 供应商电话 | 有效期 | 分类 |
---|---|---|---|---|---|---|
可乐 | 饮料一厂 | 3.00 | 250g | 8888888 | 2014.12 | 饮料 |
可乐 | 饮料二厂 | 3.00 | 250g | 6666666 | 2014.12 | 饮料 |
当我们修改这个可乐的相关信息时候我们就需要在两张表中都要修改,并且有的时候我们与供应商之间的价格还没有敲定时候,我们就无法在表中填写价格字段。
解决方案就是将上述表拆分为三张表
第三范式: 在符合前两个范式的基础上,表中的非主键字段之间不能有传递性依赖。
举个例子:
我有一张商品表:
id | 商品名称 | 仓库名称 | 仓库负责人 |
---|---|---|---|
1 | 可乐 | 仓库A | 李四 |
这时候我如果只修改了仓库A,就会导致脏数据的实现。解决办法就是将拆表。
什么是DDL DML DQL DCL TCL
DDL:(DATA DEFINE LANGUAGE)数据定义语言,包含对数据库的操作,表的操作,视图的操作和索引的操作。
DML:(DATA MANAGE LANGUAGE) 数据操作语言,包含了对表记录的增删改。
DQL:(DATA QUERY LANGUAGE) 数据查询语言, 包含了对表记录的查询。
DCL:(DATA CONTROL LANGUAGE)数据控制语言,包含了用户和权限相关的操作。
TCL:(TRANSACTION CONTROL LANGUAGE)事务控制语言,包含了事务的操作,比如开始,提交,回滚。
介绍一下数据库中约束?
数据库的约束主要有主键约束(唯一且非空),非空约束(not null),默认约束(default),唯一约束(unique,不可以重复,但可以为空),检查约束(check,符合一定条件),外键约束(foreign key)保证了参照完整性,但是会给系统带来额外的DML开销。
外键约束有哪些级联操作?
外键约束有三种级联操作。
第一种:restrict(默认情况下)
删除主表记录时候,如果表中有相关联的数据,则不允许主表删除,更新主表主键字段的值时,如果从表中有相关联的数据,则不允许主表更新。
第二种:cascade[级联更新,级联删除]
删除主表记录时候,从表中相关联的数据会级联删除,更新主表关键字段时候。从表中相关联的数据会级联更新。
第三种:set null[设置空值]
删除主表记录时候,从表中跟主表有关联的数据会被设置为空值,更新主表的主键时候从表中相关联的值设置位null。