欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

数据库事务隔离级别的概念和特性有哪些?

程序员文章站 2022-05-01 16:14:20
@概念 执行批量操作,这些操作作为一个整体,要么全部成功,要么全部失败 @四大特性acid 原子性(atomicity) 事务是一个不可再分割的工作单位,事务中的操作要么都发生,要么都不发生; 一致...

@概念

执行批量操作,这些操作作为一个整体,要么全部成功,要么全部失败

@四大特性acid

原子性(atomicity)

事务是一个不可再分割的工作单位,事务中的操作要么都发生,要么都不发生;

一致性(consistency)

事务前后,数据关系一致、业务逻辑一致;

隔离性(isolation)

一个事务所做的修改在最终提交以前,对其他事务是不可见的;

持久性(duration)

一旦事务提交,则更改是永久的;

@并发事务带来的问题

脏读:别人读到未提交的错误数据;

不可重复读readunrepeatable:别人读到的数据前后不一致,因为其间被你提交了修改;

幻读:别人验证自己的修改时产生错觉,以为自己改错了,因为其间被你提交了修改;

@隔离级别

隔离级别由低到高依次为:

read uncommitted

读未提交,顾名思义,就是一个事务可以读取另一个未提交事务的数据

造成脏读(别人读到未提交的错误数据)

read committed

读提交,顾名思义,就是一个事务要等另一个事务提交后才能读取数据

造成readunrepeatable(别人读到的数据前后不一致,因为其间被你提交了修改)

repeatable read

重复读,就是在开始读取数据(事务开启)时,屏蔽其它事务的修改操作

造成幻读(别人验证自己的修改时产生错觉,以为自己改错了,因为其间被你提交了修改)

serializable

序列化,最高的事务隔离级别,在该级别下,事务串行化顺序执行(事实上是去并发)

不存在任何并发问题,但效率低下

@默认隔离级别

大多数默认的事务隔离级别是read committed,比如sql server , oracle mysql的默认隔离级别是repeatable read

@编辑隔离级别

修改mysqld

在my.ini中设置,在mysqld选项中如下设置 [mysqld] transaction-isolation = read-committed

命令行操作

set tx_isolation='read-committed';
set global tx_isolation='repeatable-read'; 
select @@tx_isolation;
select @@global.tx_isolation;