6、事务ACID

事务原则: ACID原则 原子性、一致性、隔离性、持久性 (脏读、幻读……)

参考博客链接: https://blog.csdn.net/dengjili/article/details/82468576

6.1、事务原则: ACID原则 原子性、一致性、隔离性、持久性

原子性(Atomicity)

要么都成功、要么都失败
![image.png](https://img-blog.csdnimg.cn/img_convert/688fb0b15dcaac7a7c9fb7963d135fdc.png#clientId=u04a7afad-df88-4&from=paste&height=348&id=u5c2f54ae&margin=[object Object]&name=image.png&originHeight=562&originWidth=521&originalType=binary&ratio=1&size=45150&status=done&style=none&taskId=u11d4ffa2-3a75-4e8c-9038-02966798c41&width=322.5)


一致性(Consistency)

事务前后数据的完整性必须保持一致。
![image.png](https://img-blog.csdnimg.cn/img_convert/7607a59e2777e87184d757c85374e242.png#clientId=u04a7afad-df88-4&from=paste&height=476&id=uc8a56caa&margin=[object Object]&name=image.png&originHeight=644&originWidth=586&originalType=binary&ratio=1&size=50557&status=done&style=none&taskId=uaa0ab8f5-0071-4e5b-97bb-89f3ed665f2&width=433)


持久性(Durability)

事务一旦提交就不可逆、被持久化到数据库中!

隔离性(Isolation)

事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。
![image.png](https://img-blog.csdnimg.cn/img_convert/c38be6c27cbb20db69e45f54a1b87303.png#clientId=u04a7afad-df88-4&from=paste&height=556&id=u45295a8a&margin=[object Object]&name=image.png&originHeight=706&originWidth=622&originalType=binary&ratio=1&size=76560&status=done&style=none&taskId=u7d7efd01-ef41-4742-afd5-2f732222d88&width=490)

隔离导致的一些问题

脏读:

指一个事务读取了另外一个事务未提交的数据。
![image.png](https://img-blog.csdnimg.cn/img_convert/28c95ac225c4cbafdcc5267c5838c684.png#clientId=ubf15bf4c-9ad4-4&from=paste&height=233&id=ue2901e46&margin=[object Object]&name=image.png&originHeight=465&originWidth=998&originalType=binary&ratio=1&size=77092&status=done&style=none&taskId=u2f8f21be-5d99-4143-96ac-8203204f8a2&width=499)


不可重复读:

在一个事务内读取表中的某一行数据,多次读取结果不同。(这个不一定是错误,只是某些场合不对)

虚读(幻读)

是指在一个事务内读取到了别的事务插入的数据,导致前后读取数量总量不一致。
(一般是行影响,如下图所示:多了一行)
![](https://img-blog.csdnimg.cn/img_convert/76c2f14ae2e53161746ec14806c625f7.png#clientId=ubf15bf4c-9ad4-4&from=paste&id=Zhlgb&margin=[object Object]&originHeight=343&originWidth=245&originalType=url&ratio=1&status=done&style=none&taskId=ueba62297-f8aa-4f3d-8e9c-c09e7b8b1fc)

6.2、手动处理MySQL事务

-- 手动处理事务
set autocommit=0; -- ①关闭自动提交

start transaction;-- ②开启一组事务 

-- ③执行代码
update result set studentresult=63 where studentno=1;

commit;-- ④提交事务(执行成功), 一旦提交就会持久化
rollback -- 或者回滚(执行失败)

set autocommit=1 -- ⑤恢复自动提交



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值