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

【MySQL学习笔记】事务和MySQL中事务隔离级别修改

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

【MySQL学习笔记】事务和MySQL中事务隔离级别修改

一、事务的概念

事务:一组操作逻辑,使数据从一个状态转变到另一个状态。
事务特性:

原子性(atomicity):
一个不可分割的工作单元,要么全部提交,要么全部回滚。一致性(consistency):
事务执行前后,数据从一个合法状态转变到另一个合法状态隔离性(isolation):
事务之间相互不干扰。持久性(durablility)
事务被提交,则对数据修改时永久性的。

事务状态:

活动(active):事务正在执行中部分提交(partially committed):数据已提交到内存,未修改到磁盘失败(failed):活动和部分提交的中的事务,出现异常,导致无法继续执行。中止(aborted):失败的事务回滚执行完成后。提交(committed) 二、基本操作 1、显示事务

开启事务:start transaction或者begin
保存点:savepoint [name];
回滚:rollback
提交:commit

2、隐式事务

MySQL变量autocommit默认设置为ON,设置为false即可关闭自动DML事务提交。

##查询变量
show variables like "autocommit";
## 关闭自动提交
set autocommit=false;
## 开启自动提交
set autocommit=ture;

DDL自动提交。针对用户的操作会自动提交。两个事务间无commit或rollback则前一个事务会自动提交。start slave、stop slave、reset slave、change master to这些关于MySQL主从复制的语句会隐式提交。analiyze table、cache index、check table、flush、load index into cache、optimize table、repair table、reset等也会隐式提交。 三、事务隔离级别 1、问题背景

在事务并发时,常出现一些问题:

**脏写:**事务A、B同时开启,在未终止或未提交前,事务A修改了事务B中修改的数据。**脏读:**事务A、B同时开启,事务A读取了事务B更新而未提交的数据,事务B最终回滚了数据,则A读取的数据是脏数据。**不可重复读:**事务A、B同时开启,在事务A两次读取同一字段之间,事务B修改了该字段,导致事务A两次读取字段结果不同。**幻读:**事务A、B同时开启,在事务A两次读取同一字段之间,事务B插入一些行,导致事务A两次读取字段结果增加。

一般认为问题严重程度排序如下:
脏写 > 脏读 > 不可重复读 > 幻读

2、SQL事务隔离级别

READ UNCOMMITTED: 读未提交。READ COMMITTED: 读已提交。REPEATABLE READ: 可重复读。SERIALIZABLE: 可串行。

隔离级别脏读不可重复读幻读加锁读
READ UNCOMMITTEDYesYesYesNo
READ COMMIITTEDNoYesYesNo
REPEATABLE READNoNoYesNo
SERIALIZABLENoNoNoYes
3、查看和修改MySQL中的事务隔离级别

MySQL默认事务隔离为REPEATABLE-READ.

## 查看事务隔离级别
show @@transection;

## 设置事务隔离级别
set [global|session] transection_istoloation='READ-UNCOMMITTED | READ-COMMIITTED | REPEATABLE-READ | SERIALIZABLE';

## 在my.cnf写入,写在[mysqld]下
transaction-isolation = READ-COMMITTED
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/782803.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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