mysql锁
Innodb提供了行锁,分两种:排他锁、共享锁。
共享锁针对读,排他锁针对写,完全等同读写锁的概念。
排他锁: 写锁, 如果某个事务在更新某行,则其他事物无论是读还是写本行都必须等待;
共享锁: 读锁,如果某个事物读某行,则其他读的事物无需等待,而写事物则需等待。mysql隔离级别
事务隔离级别 - 隔离级别依次增强,但是导致的问题是并发能力的减弱
众所周知地是更新(update、insert、delete)是一个事务过程,在Innodb中,查询也是一个事务,只读事务。当读写事务并发访问同一行数据时,能读到什么样的内容则依赖事务级别:
- READ_UNCOMMITTED:读未提交-脏读- 事务能够看到其他事务没有提及的修改,当另一个事务又回滚了修改后的情况又被称为脏读dirty read
- READ_COMMITTED:读提交-幻读- 事务能够看到其他事务提交后的修改,会出现一个事务内两次读取数据可能因为其他事务提交的修改导致不一致的情况,称为不可重复读。
- REPEATABLE_READ:重复读 (默认级别)-每次都读取指定的版本,这样保证不会产生幻读,但可能读不到最新的数据
- SERIALIZABLE:串行化 -锁表,读写相互阻塞,使用较少