事务
什么是事务?
要么都成功,要么都失败
事务原则:(ACID)原子性,一致性,持久性,隔离性(脏读,幻读......)
原子性(Atomicity)
要么都成功,要么都失败
一致性(Consistency)
事务前后的数据完整性保持一致
持久性(Durability)
十五一旦提交则不可逆,被持久化到数据库中
隔离性(Isolation)
事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启事务
不能被其他事务的操作数据所干扰,事务之间要互相隔离
隔离所导致的一些问题:
脏读:
指一个事务读取了另一个事务未提交的数据
不可重复读:
在一个事务内读取表中的某一行数据,多次读取结果不同(这个不一定不对,只是某些场合不对)
虚读(幻读):
是指在一个事务内读取到了别的事务插入的数据,导致前后读取不一致
执行事务
-- ==========事务================= -- ==========mysql默认开启事务自动提交============ -- set autocommit = 0 -- 关闭 -- set autocommit = 1 -- 开启(默认) -- 手动处理事务 SET autocommit = 0 -- 关闭自动提交 -- 事务开启 START TRANSACTION -- 标记一个事务的开始,从这个之后的sql,都在同一个事务内 -- 提交:持久化(成功!) COMMIT -- 回滚:回到原来的样子(失败!) ROLLBACK -- 事务关闭 SET autocommit = 1 -- 开启自动提交 -- 了解 SAVEPOINT -- 设置一个事务的保存点 ROLLBACK TO SAVEPOINT -- 回滚到保存点 RELEASE SAVEPOINT -- 撤销保存点
模拟场景
-- =======模拟场景========= CREATE DATABASE shop CHARACTER SET utf8 COLLATE utf8_general_ci USE shop -- 创建表 CREATE TABLE `account`( `id` INT(3) 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) -- 模拟转账:事务 SET autocommit = 0 -- 关闭自动提交 START TRANSACTION -- 开启一个事务(一组事务) -- A给B转500 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 -- 恢复默认开启
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧