概述
数据库事务隔离级别: 1、Read Uncommitted(读未提交); 2、Read Committed(读已提交); 3、Repeatable Read(可重复读取); 4、Serializable(可串行化)。 |
在数据库操作中,一项事务(Transaction)是由一条或多条操作数据库的 SQL 语句组成的一个不可分割的工作单元,这些操作要么都完成,要么都取消。 数据库事务隔离级别 在实际应用中,数据库中的数据是要被多个用户共同访问的,在多个用户同时操作相同的数据时,可能就会出现一些事务的并发问题,具体如下。 1)脏读 指一个事务读取到另一个事务未提交的数据。 2)不可重复读 指一个事务对同一行数据重复读取两次,但得到的结果不同。 3)虚读/幻读 指一个事务执行两次查询,但第二次查询的结果包含了第一次查询中未出现的数据。 4)丢失更新 指两个事务同时更新一行数据,后提交(或撤销)的事务将之前事务提交的数据覆盖了。 丢失更新可分为两类,分别是第一类丢失更新和第二类丢失更新。
为了避免上述事务并发问题的出现,在标准的 SQL 规范中定义了四种事务隔离级别,不同的隔离级别对事务的处理有所不同。这四种事务的隔离级别如下。 1)Read Uncommitted(读未提交) 一个事务在执行过程中,既可以访问其他事务未提交的新插入的数据,又可以访问未提交的修改数据。如果一个事务已经开始写数据,则另外一个事务不允许同时进行写操作,但允许其他事务读此行数据。此隔离级别可防止丢失更新。 2)Read Committed(读已提交) 一个事务在执行过程中,既可以访问其他事务成功提交的新插入的数据,又可以访问成功修改的数据。读取数据的事务允许其他事务继续访问该行数据,但是未提交的写事务将会禁止其他事务访问该行。此隔离级别可有效防止脏读。 3)Repeatable Read(可重复读取) 一个事务在执行过程中,可以访问其他事务成功提交的新插入的数据,但不可以访问成功修改的数据。读取数据的事务将会禁止写事务(但允许读事务),写事务则禁止任何其他事务。此隔离级别可有效防止不可重复读和脏读。 4)Serializable(可串行化) 提供严格的事务隔离。它要求事务序列化执行,事务只能一个接着一个地执行,不能并发执行。此隔离级别可有效防止脏读、不可重复读和幻读。但这个级别可能导致大量的超时现象和锁竞争,在实际应用中很少使用。 一般来说,事务的隔离级别越高,越能保证数据库的完整性和一致性,但相对来说,隔离级别越高,对并发性能的影响也越大。因此,通常将数据库的隔离级别设置为 Read Committed,即读已提交数据,它既能防止脏读,又能有较好的并发性能。虽然这种隔离级别会导致不可重复读、幻读和第二类丢失更新这些并发问题,但可通过在应用程序中采用悲观锁和乐观锁加以控制。 |
原文来源:https://m.php.cn/article/476705.html
最后
以上就是清爽纸鹤为你收集整理的数据库事务隔离级别有哪些?的全部内容,希望文章能够帮你解决数据库事务隔离级别有哪些?所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复