栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Mysql 数据库的隔离级别

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Mysql 数据库的隔离级别

Mysql 数据库会出现的事务问题

脏读

在事务A修改数据之后提交数据之前,这时另一个事务B来读取数据,读到的是A修改后的数据,而之后A由于回滚或者修改数据再提交,则B读到的就是脏数据。

不可重复读

一个事务在读取某些数据后的某个时间,再次读取以前的数据,却发现数据已经发生了变更,或者某些数据已经被删除了。

幻读:

事务A在按查询条件读取某个范围的记录时,事务B又在该范围内插入了新的满足条件的记录,事务A 再次按条件查询记录,会产生新的满足条件的记录。

不可重复读和幻读的区别: 不可读重点是数据本身发生变化强调修改,幻读重点是数据量(强调数据的插入和删除)

为了解决事务中存在的问题mysql提供了4种隔离级别

各个隔离级别可以不同程度解决脏读,不可重复读,幻读,隔离级别各有所长,没有完美的解决方案。下面表示是各个级别是否会发生相应的问题。

事务的方式

MySQL 事务的使用

默认情况下mysql的自动提交时默认开启的,所以每次执行语句这条语句就会提交,所以在使用事务的时候需要把自动提交关掉。

MySQL 事务的使用

1、查看事务自动提交模式

show [session] variables like ‘autocommit’;

Show global variables like ‘autocommit’;

2、关闭自动提交

set global autocommit=0;

Set [session] autocommit = 0;

3、开启自动提交

set global autocommit = 1;

Set [session] sutocommit=1;

4、开启事务

begin;

或者:

start transaction;

提交

commit;

回滚

rollback;

在代码里使用事务步骤

  1. 需要先关闭自动提交
  2. 然后开启事务
  3. 执行操作数据的SQL
  4. 如果中间SQL语句抛异常,就调用rollback回滚,将数据恢复到事务开始前的状态,事务结束
  5. 如果中间SQL语句没有抛出异常,就commit提交。事务结束。

数据库如何设置隔离级别:

数据库和java的jdbc可以同时设置隔离级别,谁的隔离级别高以谁的为准。Java中有个方法是用来设置隔离级别的。Mysql中有对应的语句。

隔离级别都是使用锁来实现的。

1、行级锁:

Insert 和update delete ... 会自动添加行级锁

2、表级索(读锁和写锁)

读锁又叫共享锁本次连接可以读,其他连接也可以读,其他不行

写锁又叫排他锁本次连接读和写都可以其他不行。

使用语句 lock tables 表名 read/write;

3、页级锁

介于行级锁和表级锁之间。

设置隔离级别的方式

查看隔离级别的方式:

SELECT @@TX_ISOLATION;和select @@global.tx_isolation; 

1、读未提交 使用共享锁来实现

SET GLOBAL TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;

2、读提交 使用瞬间共享锁和排他锁来实现

SET GLOBAL TRANSACTION ISOLATION LEVEL READ COMMITTED;

3、可重复读 共享锁和排他锁实现

SET GLOBAL TRANSACTION ISOLATION LEVEL REPEATABLE READ;

4、序列化 行级锁

SET GLOBAL TRANSACTION ISOLATION LEVEL SERIALIZABLE;

引用:

MySQL事务的使用 - lin_zone - 博客园

https://www.cnblogs.com/dashafa/p/3991137.html

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/273696.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号