锁机制是数据库与文件系统最大的差别了,而不同的数据库,不同的引擎锁机制也有所不同,由于MySQL的MyISAM用的场景比较少,所以这里只介绍InnoDB的相关内容
事务
事务是数据库管理系统执行过程中的一个逻辑单元,有有限的操作序列组成
ACID特性
-
原子性
事务作为一个整体被执行,包含在事务中的对数据库的操作要么全执行,要么全不执行
-
一致性
事务应确保数据库的状态从一个一致的状态转变为另一个一致状态,一致状态指数据库中的数据应满足约束
-
隔离性
多个事务并发执行时,一个事务执行不应影响其他事务的执行
-
持久性
已被提交的事务对数据库的修改应该被永久保存到数据库中
事务的隔离级别
-
read uncommited(dirty read)
读未提交,事务可以看到其他事务更改了但是还没提交的数据,存在脏读(事务2读到了事务1修改但未提交的数据,后事务1撤销了修改,即修改不存在了)
-
read commited
读提交,事务可以看到在它执行时,其他事务已经提交的数据,允许不可重复读(执行两次相同的查询结果不一致),但不允许脏读
-
repeatable read
可重复读,同一个事务内,同一个请求,多次执行获得的记录是相同的,不能杜绝幻读(事务1修改了整表,事务2插入了一条新的数据,事务1发现新的数据没有被修改,产生幻觉)
-
serializable
解决了幻读,将锁施加在所有访问的数据上,最高级别的锁
为什么要先提到事务?首先要想清楚数据库的锁是干嘛的,就是为了避免多个事务并发执行修改或查询操作时导致数据库出现异常错误的而设置的方式,有了锁可以减少一些问题,比如幻读,脏读,但是不同的锁级别当然也不能解决所有的问题,所以要根据业务环境和表的结构灵活运用.
(未完)