键
- 超键: 关系中能唯一标识元组的属性集称为关系模式的超键
- 候选键: 不含有多余属性的超键称为候选键
- 主键: 用户选作元组标识的一个候选键
- 外键: 关系模式R1中的某属性集不是R1的主键,而是另一个关系R2的主键则该属性集是关系模式R1的外键。
范式
-
函数依赖
- 部分函数依赖:设X,Y是关系R的两个属性集合,存在X→Y,若X’是X的真子集,存在X’→Y,则称Y部分函数依赖于X。
- 完全函数依赖: 设X,Y是关系R的两个属性集合,X’是X的真子集,存在X→Y,但对任意X’有X’!→Y,则称Y完全函数依赖于X。
- 传递函数依赖: 设X,Y,Z是关系R中互不相同的属性集合,存在X→Y(Y !→X),Y→Z,则称Z传递函数依赖于X。 -
第一范式
- 数据库表中的字段都是单一属性的,不可再分。
表T(姓名,学号);字段不可再分,符合第一范式。 -
第二范式
- 符合第一范式。
- 不存在部分函数依赖,即表中的字段必须完全依赖于全部主键而非部分主键。
表T(座位,班级,姓名),主键(座位,班级);(座位,班级) ->(姓名), 但是(座位) -> (姓名)不成立,(班级)->(姓名)不成立,所以姓名完全函数依赖与(学号,班级)符合第二范式。 -
第三范式
- 符合第二范式。
- 数据表中如果不存在非关键字段对任一候选关键字段的传递函数依赖
反例 : 表T(学号 ,宿舍, 费用), 主键(学号);(学号)->(宿舍), 宿舍 != 学号,(宿舍)->(费用),费用 != 宿舍,存在传递函数依赖,故不属于第三范式。 -
BCN范式
- 符合第三范式
- 关系模型中所有的属性(包括主属性和非主属性)都不传递依赖于任何候选键
索引(基于MySQL)
-
意义
用于快速根据指定列的值,找到表重对应的行数据。类似字典中的目录。 -
UNIQUE INDEX
- 唯一索引,主键是特殊的唯一索引,根据列A创建索引时,A需不存在重复数据。 -
CLUSTER INDEX
- 聚集索引,根据多个列创建的索引(列值需不同)。聚集索引有前缀匹配规则。有索引(c0, c1, c2), 当通过(c0)/(c0, c1)/(c0, c1, c1)查询时, 都可以采用(c0, c1, c2)索引进行快速查询。
- 参考:https://dev.mysql.com/doc/refman/8.0/en/mysql-indexes.html
- 参考: https://blog.csdn.net/suifeng3051/article/details/52669644
数据库事务
-
定义
数据库系统中执行的,由一个有限的数据库操作构成的逻辑单位。通俗讲就是执行一个SQL语句单位的过程。 -
ACID性质
- 原子性(Atomicity): 事务作为一个整体被执行,包含在其中的对数据库的操作要么全部被执行,要么都不执行。
- 一致性(Consistency): 事务应确保数据库的状态从一个一致状态转变为另一个一致状态。一致状态的含义是数据库中的数据应满足完整性约束。
- 隔离性(Isolation): 多个事务并发执行时,一个事务的执行不应影响其他事务的执行。具隔离等级。
- 持久性(Durability): 已被提交的事务对数据库的修改应该永久保存在数据库中。
锁
-
悲观锁
在关系数据库管理系统里,悲观并发控制(又名“悲观锁”,Pessimistic Concurrency Control,缩写“PCC”)是一种并发控制的方法。它可以阻止一个事务以影响其他用户的方式来修改数据。如果一个事务执行操作的某行数据应用了锁,那只有当这个事务把锁释放,其他事务才能够执行与该锁冲突的操作。
悲观并发控制主要用于数据争用激烈的环境,以及发生并发冲突时使用锁保护数据的成本要低于回滚事务的成本的环境中。 -
乐观锁
在关系数据库管理系统里,乐观并发控制(又名“乐观锁”,Optimistic Concurrency Control,缩写“OCC”)是一种并发控制的方法。它假设多用户并发的事务在处理时不会彼此互相影响,各事务能够在不产生锁的情况下处理各自影响的那部分数据。在提交数据更新之前,每个事务会先检查在该事务读取数据后,有没有其他事务又修改了该数据。如果其他事务有更新的话,正在提交的事务会进行回滚。
相对于悲观锁,在对数据库进行处理的时候,乐观锁并不会使用数据库提供的锁机制。一般的实现乐观锁的方式就是记录数据版本。 -
数据版本
为数据增加的一个版本标识。当读取数据时,将版本标识的值一同读出,数据每更新一次,同时对版本标识进行更新。当我们提交更新的时候,判断数据库表对应记录的当前版本信息与第一次取出来的版本标识进行比对,如果数据库表当前版本号与第一次取出来的版本标识值相等,则予以更新,否则认为是过期数据。
网友评论