MySQL学习日志十二,事务
一、事务
要么都成功,要么都失败
四个特性:
原子性:不可再分割的工作单位,一个事务中要么都完成,要么都不完成
一致性:从一致的状态转换到另一个一致的状态,事务前后的数据保持一致
隔离性:屏蔽其他的事务,专注自己的事务,互不干扰
持久性:存储在数据库的数据是永久的,事务一旦提交就不可逆,事务未提交就返回到原样
隔离产生的问题
-
脏读:指一个事务读取到了另一个事务未提交的数据
-
不可重复性
-
虚读
set autocommit=1;-- 设置自动提交事务开启,mysql的事务默认是开启的
set autocommit=0;-- 设置自动提交事务关闭
-- 手动关闭自动提交事务
set autocommit=0;
-- 开启事务
START transaction;
-- 如果数据没有问题就提交事务,提交成功,数据一旦提交就持久化
commit;
-- 如果数据出错就不提交事务,回滚到原来的数据
rollback;
-- 再次设置事务开启状态
set autocommit=1;
-- 可以设置保存点
SAVEPOINT ;
-- 可以设置删除保存点
release SAVEPOINT;
-- 查看自动提交开启状态
show variables like 'autocommit';
模拟账户转账
-- 创建一个shop数据库,记录工资
CREATE DATABASE SHOP CHARACTER SET UTF8 COLLATE UTF8_GENERAL_CI
USE SHOP
-- 查询建立数据库表的语句
SHOW CREATE TABLE account;
CREATE TABLE `account` (
`id` int NOT NULL,
`name` varchar(255) DEFAULT NULL,
`money` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3
SELECT *FROM account;
-- 关闭自动提交事务
SET autocommit=0;
-- 开启一个事务
start transaction;
-- 插入sql语句
UPDATE account SET money=money-500 WHERE `name`='A';
UPDATE account SET money=money+500 WHERE `name`='B';
-- 数据没问题就提交事务,数据一旦提交,就持久化到数据库
COMMIT;
-- 数据有问题就回滚
ROLLBACK;
-- 开启自动提交变成默认状态
set autocommit=1;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~