[One question a day]数据库中事务的隔离级别有哪几种?

Posted 阿呆的脑袋

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[One question a day]数据库中事务的隔离级别有哪几种?相关的知识,希望对你有一定的参考价值。


[One question a day]数据库中事务的隔离级别有哪几种?

    在SQL中定义了四种隔离等级,分别是 READ UNCOMMITTED(未提交读) ,READ COMMITTED(提交读),REPEATABLE READ(可重复读),SERIALIZABLE(串行化)。每一种级别都规定了一个事务中所作的修改,哪些在事务内和事务间是可见的,哪些是不可见的。较低级别的隔离等级往往可以执行更高的并发,系统的消耗也更低。

[One question a day]数据库中事务的隔离级别有哪几种?

[One question a day]数据库中事务的隔离级别有哪几种?


[One question a day]数据库中事务的隔离级别有哪几种?

READ UNCOMMITTED(未提交读)

    该级别下,事务中的修改在没有提交之前,对于其他事务也是可见的。事务可以读取没有提交的数据,这也被称为脏读。此级别的性能并不比其他级别好很多,但是缺乏其他级别的很多好处,在实际应用中很少用到。


READ COMMITTED(提交读)

    大多数的数据库系统的默认隔离就是 READ COMMITTED (mysql 不是)。该级别下,一个事务从开始到提交之前,对于其他的事务,都是不可见的。同时,这个级别也被称为不可重复读(nonrepeatable read),因为在事务中执行两次相同的查询,如果期间别的事务执行完成,可能会得到不一样的结果。


REPEATABLE READ(可重复读)

    该级别解决了脏读的问题,保证了一个事务中多次读取同样的记录的结果是一致的。但是理论上,该级别依旧无法解决另一个问题:幻读。幻读指的是当某个事务在读取某个范围内的数据时,另外一个事务又在该范围内插入了新的数据,当之前的事务再次读取该范围的记录时,会产生幻行。


SERIALIZABLE(可串行化)

    该级别是最高的隔离级别。其通过强制事务串行执行,避免了去前面说的幻读。SERIALIZABLE会在读取的每一行数据上都加锁,所以会有大量的超时和锁争用的问题。该级别在实际应用中很少使用,一般只有非常需要确保数据一致性并且可以接受没有并发的情况下,才会考虑使用该级别。


以上是关于[One question a day]数据库中事务的隔离级别有哪几种?的主要内容,如果未能解决你的问题,请参考以下文章

one day one linuxlinux下的软件包管理工具

python_one-day

python day one 变量,if

Liinq中事操作保存

凉凉的笔记 one.day

php https://wordpress.stackexchange.com/questions/160217/is-it-possible-to-apply-a-meta-query-to-one