mysql数据库隔离级别_mysql数据库隔离级别

# 原创,转载请留言联系

事务的隔离级别 (由高到低)

1.串行化(serializable):一个事务一个事务的执行

2.可重复读(Repeatable-Read) 可重复读,无论其他事务是否修改并提交了数据,在这个事务中看到的数据值始终不受其他事务影响  (mysql数据库所默认的级别)

3.读已提交(Read Committed)  读取已提交,其他事务提交了对数据的修改后,本事务就能读取到修改后的数据值(大多数数据库默认的隔离级别)

4.读未提交:(Read Uncommitted)  读取未提交,其他事务只要修改了数据,即使未提交,本事务也能看到修改后的数据值。

结合实际流程理解一下:

58bdb4a82955ebf03ac7831dabf5d9c4.png

1.串行化 serializable

串行化就是一个事务一个事务的执行。一个事务未执行完毕,另一个事务不能执行。例如上面的购买商品流程。用户A购买商品时,开始一个事务。在这个事务未执行完的时候,用户B不能开始事务。

2.可重复读 Repeatable-Read

可重复读就是一个事务里,无论查找多少遍,都是一样的结果,即使另一个事务对数据进行了更改,查到的结果也是永远一样。例如,用户A开始了事务,查询商品的库存为3。即使用户B这时候开始事务,然后完成了事务,修改了库存,提交了事务。但是用户A的事务在查询商品的库存永远都是3,并不会因为用户B的事务更改了库存而更新数据。它是独立于一个事务的。Mysql默认的隔离级别就是可重复读。

3.读已提交 Read Committed

读已提交是其他事务提交了对数据的修改后,本事务就能读取到修改后的数据值。

例如,用户A开始了事务,查询商品数据是3。这时候,用户B开始了事务,修改了商品库存为1,并且事务提交了。这时候A的事务再查询库存的时候,库存不再是3了,而是1。

很多数据库的默认隔离级别都是读已提交。

4.读未提交 Read Uncommitted

读未提交是其他事务只要修改了数据,即使未提交,本事务也能看到修改后的数据值。例如,用户A开始了事务,查询商品库存是3。这时候用户B开始了事务,先修改了商品库存为1,但是还没有提交。即使这样,用户A的事务再查询商品库存时,查到的库存也是1。

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

在用乐观锁的时候,必须要把mysql的隔离级别设置为读已提交。

Ubuntu下的设置方法:

方式一:

1. 使用vi打开mysql配置文件

sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf

2. 在文件的最末尾添加如下配置, 指定mysql数据库的隔离级别为READ-COMMITTED,如下图

# 可选参数有:READ-UNCOMMITTED, READ-COMMITTED, REPEATABLE-READ, SERIALIZABLE.

transaction-isolation=READ-COMMITTED

3. 在终端中重启mysql服务

sudo service mysql restart

方式二:

1. 进入mysql终端

2. 查看当前事务隔离级别

select @@global.tx_isolation;

3. 设置隔离级别,可选的参数READ UNCOMMITTED  | REPEATABLE READ | SERIALIZABLE

SET GLOBAL TRANSACTION ISOLATION LEVEL READ COMMITTED;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值