MySQL事务
事务
1.什么是事务
要么都成功,要么都失败
- SQL执行, A 给 B 转账 A 1000 ——》200 B200
- SQL执行, B 收到 A 的钱 A 800 ——》B400
核心:将一组SQL放在一个批次中去执行~
事务原则:ACID原则 原子性,一致性,隔离性,持久性(脏读,幻读)
- 原子性(Atomicity):两个步骤一起成功一起失败(-200和+200必须同时发生)
- 一致性(Consistency):针对一个事务操作前和操作后的状态一致,最终一致性。(最后总共是1800,操作前后都不会发生变化)
- 持久性(Durability):事务结束后的数据不随着外界原因导致数据丢失。(事务没有提交,恢复原状。事务已经提交,持久化到数据库)
- 隔离性(Isolation):多个用户同时操作,排除其他事务对本次事务的影响
2.事务的隔离级别
脏读:指一个事务读取了另一个事务未提交的数据
不可重复读:在第一个事务内读取表中的某一行数据,多次读取结果不同。(不一定是错误,可能是场合不对)
幻读:指在一个事务内读取了别的事务的插入的数据,导致前后读取不一致
-- mysql 是默认开启事务自动提交的 SET autocommit = 0 /*关闭*/ SET autocommit = 1 /*开启(默认开启)*/ -- 手动处理事务 SET autocommit = 0 /*关闭*/ -- 事务开启 START TRANSACTION -- 标记一个事务的开始,从这个之后的sql都在同一个事务内 INSERT xx INSERT xx -- 提交:持久化(成功) COMMIT -- 回滚:回到原来的样字(失败) ROLLBACK -- 事务结束 SET autocommit = 1 /*开启*/ -- 了解 SAVEPOINT 保存点名 -- 设置一个事务的保存点 ROLLBACK TO SAVEPOINT 保存点名 -- 回滚到保持存点 RELEASE SAVEPOINT 保存点名 -- 撤销保存点
模拟场景
-- 转账 CREATE DATABASE shop CHARACTER SET utf8 COLLATE utf8_general_ci USER shop CREATE TABLE `account`( `id` INT(9) NOT NULL AUTO_INCREMENT, `name`VARCHAR(30) NOT NULL, `money` DECIMAL(9,2) NOT NULL, PRIMARY KEY(`id`) )ENGINE=INNODB DEFAULT CHARSET=utf8 INSERT INTO account(`name`,`money`) VALUES('A',2000.00),('B',10000.00) -- 模拟转账:事务 SET autocommit = 0; -- 关闭自动提交 START TRANSACTION -- 开启一个事物 UPDATE account SET money = money - 500 WHERE `name`='A' -- A减500 UPDATE account SET money = money + 500 WHERE `name`='B' -- B加500 COMMIT; -- 提交事务 ROLLBACK; -- 回滚 SET autocommit =1; -- 恢复默认值
本文作者:Jev_0987
本文链接:https://www.cnblogs.com/jev-0987/p/14452350.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步