事务未提交 别人能读取到吗 | 您所在的位置:网站首页 › 兼职谎报了学校别人能查到吗 › 事务未提交 别人能读取到吗 |
SQL事务是一组原子性的SQL查询。事务内的语句要么全部执行成功,要么全部执行失败。 事务是ACID的重要保证,事务的重要性就不再赘述,下面详细对比下SQL标准中定义的事务隔离性级别。 ![]() read uncommited(未提交读) 在事务中的修改,即使没有提交,本事务中的修改对其他事务也是可见的。查询事务可能读取到未提交的数据(此时的修改可能会被回滚),这也被称为脏读。 在实际应用中很少使用该事务级别。 如小明信用卡消费3000元,但是在事务提交过程中发生了异常,进行了回滚。假如同一个查询事务正好在消费回滚前后对小明信用卡消费额度进行了两次查询,那么回滚前后查询结果会相差3000元,回滚前的查询到这3000元的消费是未提交的数据。 read committed(提交读) 一个事务开始到提交前,所做的任何修改对其他事务都是不可见的。 在同一个事务中执行两次相同的查询,得到的结果可能不一样(过程中可能有修改事务提交)。 同样小明消费了2000元,且消费事务提交成功。假如同一个查询事务在消费前后对小明信用卡消费额度查询了两次,那么两次结果是相差2000元的。 repeatable read(可重复读) 在可重复读中,该sql第一次读取到数据后,就将这些数据加锁(悲观锁),其它事务无法修改这些数据,就可以实现可重复读了。但这种方法却无法锁住insert的数据,可能导致幻读出现。此级别是mysql的默认级别。 同样小明又消费了1000元,且消费事务提交成功。假如在同一事务中在消费前后查询小明本月消费清单,那么查询到的清单也是不同的,首次查询结果中没有此次1000元的消费记录,后一次查询结果中有此次1000元的消费记录。 serializable(可串行化) 该级别是事务的最高隔离级别,是通过强制事务串行执行。因为该级别锁定整个范围的键,并一直持有锁,直到事务完成。该级别包括REPEATABLE READ,并增加了在事务完成之前,其他事务不能向事务已读取的范围插入新行的限制。 该级别锁可能导致大量的超时和锁争用的问题,实际中也很少用到该隔离级别。 一句话总结:- Uncommitted read 同一事务多次查询可能读到别人的脏数据 - Committed read 同一事务多次查询可能读到多次被修改的数据 - Repeatable read 同一事务多次查询可能读到新增的数据 - serializable 能够保证同一事务中两次查询结果一致 隔离级别对比![]() |
今日新闻 |
推荐新闻 |
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 |