mysql锁和事务
2019-11-18 10:47:01 0 举报
AI智能生成
mysql 锁 和 事务
作者其他创作
大纲/内容
如何理解:如A事务开始读取DB数据为1到程序里并进行了一些业务逻辑处理,这是B事务修改DB值为2,此时A事务又读取到最新只为2了。这个时候A事务在程序代码里无法进行逻辑处理,因为数据可能不停的变化,前面已经处理了部分逻辑,突然数据又变化了,相当前面处理的逻辑可能不对了。所以违反了一致性和隔离性。因为在程序代码里应该数据值不能变化。
表锁
开销小,加锁快,锁定粒度大,并发度最低,偏向MYISAM存储引擎,发生锁冲突的概率最高
行锁
行锁:开销大,加锁慢,会出现死锁,锁定力度小,并发度高,偏向INNODB存储引擎,发生锁的冲突概率最低
InnoDB与MyISAM的最大不同点:
1支持事务
2采用了行级锁
事务与ACID属性
原子性,一致性,隔离性,持久性
并发事务带来的问题
更新丢失:两个事务同时操作相同数据,后提交的事务会覆盖先提交的事务处理结果,通过乐观锁就可以解决
脏读:事务A读取了事务B已经修改但尚未提交的数据,如果B事务回滚,A读取的数据无效,不符合一致性
不可重读:事务A读取到了事务B已经提交的修改数据,不符合隔离性
幻读:事务A读取到了事务B提交的新增,删除数据,不符合隔离性
锁事务隔离级别
查看DB事务隔离级别:show variables like 'tx_isolaion'
设置事务隔离级别:set tx_isolation= 'REPEATABLE-READ';
隔离级别1:读未提交(READ-UNCOMMITTED):脏读可能、不可重复读可能、幻读可能
隔离级别2:读已提交(READ-COMMITTED):脏读不可能、不可重复读可能、幻读可能
隔离级别3:可重复读(REPEATABLE-READ):脏读不可能、不可重复读不可能、幻读可能 DB默认数据隔离级别
隔离级别4:可串行化(SERIALIZABLE):脏读不可能、不可重复读不可能、幻读不可能
锁的分类:乐观锁和悲观锁。读锁和写锁都是悲观锁
0 条评论
下一页