事务
MySQL的事务的四大特性(ACID):具体的概念网上资料一大把
- 原子性
- 一致性
- 隔离性
- 持久性
因为事务隔离性的不同,可能产生一下数据相关问题:具体的概念网上资料一大把
- 脏写
- 脏读
- 不可重复读
- 幻读
所以MySQL根据隔离性,把事务分为几个级别:具体的概念请百度
- 读未提交
- 读已提交
- 可重复读
- 串行化
锁解读
表锁:锁住整个表,一般用于数据库迁移
- 读锁:读操作(自己session和其他session),写操作(自己session会报错,其他session会阻塞)
- 写锁:读,写操作(自己session都可以,其他session都会阻塞)
行锁:锁住数据库表的一行记录
更新操作:自己session更新不提交,其他session更新这条数据会阻塞,更新其他数据不会阻塞
四种事务的隔离级别能够解决的问题,和不能解决的问题如图所示,具体操作自己实验
MySQL的事务默认隔离级别是可重复读。可能产生幻读的问题。 在可重复读的隔离性的前提下,可以用间隙锁来解决幻读的问题。
锁优化:
索引方面:搜索字段尽量走索引,避免无索引字段由行锁升级为表锁,控制锁的范围,控制检索的范围,避免间隙锁
事务方面:控制事物的隔离级别,隔离级别越低,性能越高