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

MySQL事务

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

MySQL事务

概念

如果一个包含多个步骤的业务操作,被事务管理,那么这些操作要么同时成功,要么同时失败

开启事务:begin/start transaction

提交:commit

回滚:rollback

设置保存点:savepoint(配合rollback使用)

事务提交的两种方式

自动提交

手动提交

MySQL中事务默认自动提交

MySQL一条DML语句就提交一次事务

Oracle中事务默认手动提交

Oracle执行完DML语句要commit,不然没有保存(自动有begin,不自己写)

 -- 查看事务的默认提交方式 1--自动提交  0--手动提交
 select @@autocommit;
 ​
 -- 修改事务的默认提交方式
 set @@autocommit=0;
保存点
 start transaction;
 delete from account where id = 25;
 savepoint a;-- 设置保存点
 delete from account where id = 28;
 rollback to a;-- 回滚到保存点

回滚到保存点,保存点搭配rollback使用

Truncate清空表不能回滚(显示成功,但是无效)

delete删除数据可以回滚

事务的四大特性
ACID事务的四大特性
原子性(atomicity)一个事务是一个不可分割的最小工作单元,事务中的所有操作要么全部执行成功,要么全部失败,不会出现有部分操作执行成功的情况
一致性(consistency)事务必须让数据库从一个一致性状态到另一个一致性状态,从两个人都是1000块钱的状态,到一个是500一个人是1500的状态,不会出现中间状态
隔离性(isolation)事务在提交之前的所有操作对其它事务是不可见的,一个人是500块另一个人1500块,并且未提交之前,别人看到的还是两人都是1000块
持久性(durability)事务一旦提交,事务里的所有修改会持久的保存到数据库中(此时即使系统崩溃,修改的数据也不会丢失)
事务的隔离级别

多个事务操作同一批数据,则会引发一些问题,设置不同的隔离级别可以解决这些问题

存在问题

丢失更新:当两个或多个事务选择同一行,最初的事务修改的值,会被后面的事务修改的值覆盖。

脏读:一个事务读取到另一个事务中没有提交的数据

不可重复读(虚读):在一个事务中,两次读取到的数据不一样

幻读:一个事务操作(DML)数据表中所有记录,另一个事务添加了一条数据,则第一个事务查询不到自己的修改

隔离级别

read uncommitted:读未提交

产生的问题:脏读、不可重复读、幻读

read committed:读已提交(Oracle默认)

产生的问题:不可重复读、幻读

repeated read:可重复读(Mysql默认)

产生的问题:幻读

serializable:串行化

可以解决所有问题

隔离级别丢失更新脏读不可重复读幻读
Read uncommitted×
Read committed(Oracle默认)××
Repeatable read(MySQL默认)×××
Serializable××××

备注 : √ 代表可能出现 , × 代表不会出现 。

注意: 隔离级别从小到大安全性越来越高,但效率越来越低,要选择合适的隔离级别保证相对安全的同时效率较高

 -- 查询数据库的隔离级别
 select @@tx_isolation;
 ​
 -- 设置数据库的隔离级别,设置之后,要重新打开mysql才会生效
 set global transaction isolation level "级别字符串";

Mysql数据库没有幻读

事务的隔离级别设置不当会导致事务事务失去隔离性

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

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

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