1.数据库的锁

从数据库的操作粒度上可以分为表锁和行锁:InnoDB支持行锁,myISAM不支持行锁。

 

mysql事务隔离级别和锁_MySQL

 

2.数据库事务和隔离级别

我们都知道事务具有四大属性——ACID。

隔离性Isolation:事务处理中的数据状态对外部是不可见的,反之也无法获取到其他事务处理中的数据状态。

2.2并发事务带来的问题

不可能重复读:在一次事务中,多次执行同样的查询条件,获取到的结果不一致,也就是读到了其他事务的修改的数据。不符合事务的隔离性

 

 

前面有说MyISAM会根据执行的操作对数据加表锁(读锁/写锁)。InnoDB有所不同,在非串行化的隔离级别下面select语句不会加锁,但是update,insert,delete会根据条件加行锁。且行锁是加在索引上面的,如果这些语句没有走索引,那么也会加表锁。

因此我们应该:

3.尽量控制事务大小,减少锁定资源量和时间长度,涉及事务加锁的sql尽量放在事务最后执行