mysql事务

事务的ACID原则包括原子性、一致性、持久性和隔离性,确保数据在并发操作中的正确性。事务并发可能导致脏读、不可重复读和幻读问题。MySQL默认隔离级别为可重复读,可通过设置事务来控制提交和回滚。测试事务时,可以使用START TRANSACTION、COMMIT和ROLLBACK等命令。
摘要由CSDN通过智能技术生成

事务

6.1 什么是事务

要么都成功,要么都失败。


  1. SQL执行    A给B 转账 A 1000 ------> B 200

  2. SQL执行 B收到A的钱 A 800 -------> B 400


将一组SQL放在一分批次去执行

事务原则:ACID原则

参考博客:事务ACID理解_dengjili的博客-CSDN博客_acid

原子性(Atomicity)

原子性是指事务中一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生

一致性(Consistency)

事务前后的数据完整性要保持一致

持久性(Durability) ------事务提交

事务一旦提交则不可逆,被持久化到数据库中

隔离性(Isolation)

事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。

事务并发导致的问题

脏读

指一个事务读取了另外一个事务未提交的数据

 

不可重复读

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

 

 

虚读(幻读)

是指在一个事务内读取到了别的事务插入的数据,导致前后读取不一致。

(一般是行影响)

 

读未提交:一个事务读取到其他事务未提交的数据;这种隔离级别下,查询不会加锁,一致性最差,会产生脏读、不可重复读、幻读的问题

读已提交:一个事务只能读取到其他事务已经提交的数据;该隔离级别避免了脏读问题的产生,但是不可重复读和幻读的问题仍然存在;

读提交事务隔离级别是大多数流行数据库的默认事务隔离级别,比如 Oracle,但是不是 MySQL 的默认隔离界别

可重复读:事务在执行过程中可以读取到其他事务已提交的新插入的数据,但是不能读取其他事务对数据的修改,也就是说多次读取同一记录的结果相同;该个里级别避免了脏读、不可重复度的问题,但是仍然无法避免幻读的问题

6.2 测试事务准备转账

==========事务============

mysql是默认开启事务自动提交的

SET autocommit = 0 //关闭

SET autocommit = 1 //开启


手动开启事务

SET autocommit = 0 //关闭自动提交

---事务开启

START TRANSACTION ---标记一个事务的开始,从这之后的sql都在同一个事务中

insert ...

insert ...

--提交,持久化(成功!)

COMMIT

--回滚:回到原来的样子(失败!)

ROLLBACK

--事务结束

SET autocommit = 1 //开启自动提交

---了解

SAVEPOINT 保存点名称 --设置一个事务的保存点

ROLLBACK TO SAVEPOINT 保存点名称 --回滚到保存点

RELEASE SAVEPOINT 保存点 --撤销保存点

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值