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

mysql学习笔记——事务

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

mysql学习笔记——事务

文章目录
  • 什么是事务
  • 事务机制的原理(简单理解)
  • 事务的四特性(原子、一致、隔离、持久)
  • 事务的隔离性(四隔离级别)
  • mysql中演示事务和事务隔离性
    • 一些常用命令

什么是事务

一个事务是一个完整的业务逻辑单元,不可再分。事务的存在是为了保证数据的完整性、安全性。

案例:实现银行账户转账业务,A向B转100元。
实现:两条update语句,A-100,B+100。

update t_act set balance = balance - 100 where actno = 'A';
update t_act set balance = balance + 100 where actno = 'B';

此业务中,上述两条DML语句必须同时成功或同时失败。这就需要用到“事务机制”

ps:
1.和事务相关的语句:DML语句(insert、delete、update)
WHY:因为DML语句与数据库的数据有关,事务机制就是为了保证数据的完整性、安全性。
2.如果所有业务都可以用一条DML语句完成那么还需要事务机制吗?
不需要。

事务机制的原理(简单理解)

举例:完成一个业务需要三条DML语句:A添加、B修改、C删除。

简单理解就是DML语句A、B、C捆绑在一起,ABC要么同时成功,要么同时失败。

  • TCL命令:
    commit(提交)
    rollback(回滚)
    savepoint(保存点)
事务的四特性(原子、一致、隔离、持久)
  • 原子性:事务是最小单元不可再分。通过undolog实现
  • 持久性:最终数据必须持久化到硬盘中,事务才算成功。通过redolog实现
  • 隔离性:事务与事务之间具有隔离性。通过(读写锁+MVCC)来实现
  • 一致性:事务必须保持多条DML语句同时成功或同时失败。通过原子性,持久性,隔离性共同实现。
事务的隔离性(四隔离级别)
特点(以同时处理相同表数据的事务A与事务B来举例)
第一级别:read uncommitted读未提交。A未提交,B也可以看到A未提交的数据,所以会看到脏数据,脏数据是不稳定的。
第二级别:read committed读已提交。A提交了,B就可以看到,B进行时总受A影响,原始数据一经A修改并提交,那么B就不可再看到原始数据,此为不可重复读
第三级别:repeatable read可重复读。A提交了,B也提交了,B才可以看到。A与B同时进行时不受对方视觉上的影响,但看到的原始数据是幻象。系统对幻象数据的处理命令也不会报错。
第四级别:serializable序列化/串行化读。A和B不可以同时处理同一数据,要排队,解决上述所有问题,但效率低

隔离级别越高,数据库事务并发执行性能越差,能处理的操作越少。所以一般地,推荐使用REPEATABLE READ级别保证数据的读一致性。对于幻读的问题,可以通过加锁来防止。

数据库支持的隔离级别默认的隔离级别
MYSQL四种repeatable read
ORACLE只read committed、serializableread committed
mysql中演示事务和事务隔离性 一些常用命令
//mysql中事务是自动提交的,每执行一条DML就提交一次。
start transaction;      //关闭自动提交(每次commit后要重新关闭)
commit;         //手动提交命令
rollback;           //回滚到上一个commit
set global transaction isolation level 级别;//设置隔离级别,后需重启mysql
select @@global.tx_transaction; //察看隔离级别

演示read committed:



演示repeatable read:

演示都大同小异~就不放贴图啦

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

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

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