数据库事务速记

1.   隔离性有隔离级别(4个):

隔离级别 默认级别(数据库) 隔离 解决的问题 QA 导致的问题

读未提交,

read uncommitted

       

读取到其他事务的中间状态,

若其他事务回滚则会读取到垃圾数据

读已提交, 

read committed

MsSQL,

Oracle

对写操作隔离

解决脏读问题

Q: 其他事务读取是否受影响

A: 不受影响

导致不可重复读问题

可重复读

repeatable read

mySQL

对读操作隔离

一次事务中只在第一次select时

生成快照

解决不可重复读问题

Q:  其他事务是否可以增删改

A: Yes

导致幻读问题

串行化

serializable

    解决幻读问题   导致并发问题

2..锁

共享锁允许加其他共享锁,
排它锁不允许加其他任何锁.

insert、delete和update都是会加排它锁(Exclusive Locks)的,

select默认不加锁(也可以加共享锁or 排它锁),排他锁会阻止其它事务再对其锁定的数据加读或写的锁,但是对不加锁的读就不起作用了。

3.测试-锁:

窗口1:

1  START TRANSACTION;
2  select * from account where id = 121 lock in share mode;  
3 -- COMMIT

窗口2:

1  START TRANSACTION;
2  select * from account where id = 121 for update; 
3  -- COMMIT

窗口3(查看锁的记录)

1 SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX;
2 SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS;
3 SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS;
原文地址:https://www.cnblogs.com/AspDotNetMVC/p/12619600.html