社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
SQL92标准定义了数据库事务的四个特点:
允许 脏读
,但不允许更新丢失 (排他写锁)
一个事务已经开始写数据,另一个事务不允许同时进行写操作
但允许其他事务读此行修改后未提交的数据
SET GLOBAL TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
表现:可以读取任何数据,但是如果更新到同一数据上,需要等待另一个事务执行完,有超时异常
允许 不可重复读
,但不允许 脏读
(瞬间共享读锁,排他写锁)
读数据的事务允许其他事务访问这行数据
写数据的事务在未提交前禁止其他事务访问这行数据
SET GLOBAL TEANSACTION ISOLATION LEVEL READ COMMTTED
表现:对同一数据更新需要等待,一个事务如果没有COMMIT,任何其它事务无法读取它的中间值。因为只是加了行共享锁,所以此时,还是可以读到一个事务里正在被update的数据。
禁止 不可重复读
和 脏读
,有时会出现幻影数据,innoDB 中此隔离级别不允许幻象读。(共享写锁,排他写锁)
读事务禁止写事务
写事务禁止其他事务
SET GLOBAL TRANSACTION ISOLATION LEVEL REPEATABLE READ
读也加锁 ,要求事务序列化执行
在序列化隔离中,innodb会对每一个select语句后自动加上lock in share mode.
锁粒度 | 本连接查询 | 本连接更新 | 其它连接查询 | 其它连接insert | 其它连接update |
---|---|---|---|---|---|
LOCK TABLES 表名 READ; | 可以 | 不可以 | 可以 | 不可以 | 不可以 |
LOCK TABLES 表名 WRITE; | 可以 | 可以 | 不可以 | 不可以 | 不可以 |
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!