事务的隔离性是指在并发环境中,并发的事务是互相隔离的,一个事务的执行不能被其它事务干扰。也就是说,不同的事务并发操作相同的数据时,每个事务都有各自完整的数据空间。
一个事务内部的操作及使用的数据对其它并发事务是隔离的,并发执行的各个事务是不能互相干扰的。
不同的隔离级别可以解决不同的问题,SQL的标准事务隔离级别包括:
读未提交(read uncommitted): 一个事务还没有提交时,它做的变更就能被别的事务看到。
读提交(read committed): 一个事物提交之后,它做的变更才会被其他事务看到。
可重复读(repeatable read): 一个事物执行过程中看到的数据,总是跟这个事务在启动时看到的数据是一致的。未提交变更对其他事务也是不可见的。
串行化(serializable): 对于同一行记录,写会加“写锁”,读会加“读锁”,当出现锁冲突时,后访问的事务需要等前一个事务执行完成,才能继续执行。
可能导致的问题有
- 脏读: 一个事务读到另一个事务未提交的更新数据。
- 不可重复读: 一个事务两次读同一行数据,可是这两次读到的数据不一样。
- 幻读:一个事务执行两次查询,但第二次查询比第一次查询多出了一些数据行。