ACID
数据库中的事务(Transaction)有四个特性,分别是:原子性(Atomicity),一致性(Consistency),隔离性(lsolation),持久性(Durability)
所谓事务,它是一系列操作的序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。(执行逻辑功能的一组指令或者操作称之为事务)
1. 原子性
一个事务是一个不可再分割的工作单位,事务中的操作要么都执行,要么都不执行。
2. 一致性
执行一个事务前和后,数据库的完整性约束没有被破坏。也就是说事务不能破坏数据库的完整性以及业务逻辑的一致性。
3. 隔离性
多个事务并发时,每个事务应该是隔离的,一个事务不应影响其他事务的运行效果。
4. 持久性
事务执行完成后,该事务对数据库的更改便持久到了数据库中,这个更改是永久的。
事务并发问题
1. 脏读:
事务A读取了事务B的更新的数据,但是事务B回滚了,导致A读取的为脏数据。
2. 不可重复读:
事务A读取同一数据两次,但是在两次之间事务B对该数据进行了修改并提交,导致事务A读取两次读取不一致。
3. 虚读(幻读):
一个事务读取到了别的事务插入的数据,导致前后读取不一致。
四种隔离级别设置
设置 | 描述 |
---|---|
Serializable | 可避免脏读、不可重复读、虚读情况的发生。(串行化) |
Repeatable read | 可避免脏读、不可重复读情况的发生。(可重复读) |
Read committed | 可避免脏读情况发生(读已提交)。 |
Read uncommitted | 最低级别,以上情况均无法保证。(读未提交) |
十、索引
MySQL官方对索引的定义为:索引(index)是帮助MySQL高效获取数据的数据结构,索引是一种数据结构。
分类
在一个表中,主键索引只能有一个,唯一索引可以有多个
- 主键索引(PRIMARY KEY):
唯一的标识,主键不可重复,只能有一个列作为主键 - 唯一索引(UNIQUE KEY):
避免重复的列出现,唯一索引可以重复,多个列都可以标识唯一索引 - 常规索引(KEY/INDEX)
默认的,index、key关键字来设置 - 全文索引(FULLTEXT)
在特定数据库引擎才有,例如MyISAM。可以快速定位数据
索引原则
- 索引并非越多越好
- 不要对经常变动的数据添加索引
- 小数据量的表不需要添加索引
- 索引一般加在常用来查询的字段上
- 可以理解索引为服务查询的一个结果