mysql 内置功能 事务 介绍
2024-10-14 10:00:38
事务用于将某些操作的多个SQL作为原子性操作,一旦有某一个出现错误,即可回滚到原来的状态,从而保证数据库数据完整性
创建数据库db12
create database db12 charset=utf8;
use db12;
create table user(
id int primary key auto_increment,
name char(32),
balance int
); insert into user(name,balance)
values
('wsb',1000),
('egon',1000),
('ysb',1000);
mysql> select * from user;
+----+------+---------+
| id | name | balance |
+----+------+---------+
| 4 | wsb | 1000 |
| 5 | egon | 1000 |
| 6 | ysb | 1000 |
+----+------+---------+
3 rows in set (0.00 sec)
#原子操作
start transaction; 开启事务
事务结束:End Transaction;
start transaction;
update user set balance=900 where name='wsb'; #买支付100元
update user set balance=1010 where name='egon'; #中介拿走10元
update user set balance=1090 where name='ysb'; #卖家拿到90元
commit;
commit ;提交
#出现异常,回滚到初始状态
rollback ;回滚
只要没有commit提交 就可以回滚到初始的金额
start transaction;
update user set balance=900 where name='wsb'; #买支付100元
update user set balance=1010 where name='egon'; #中介拿走10元
update user set balance=1090 where name='ysb'; #卖家拿到90元,出现异常没有拿到
rollback;
commit;
没有commit; 执行rollback;
mysql> start transaction; mysql> update user set balance=900 where name='wsb'; #买支付100元
Query OK, 1 row affected (0.02 sec)
Rows matched: 1 Changed: 1 Warnings: 0 mysql> update user set balance=1010 where name='egon'; #中介拿走10元
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0 mysql> update user set balance=1090 where name='ysb'; #卖家拿到90元
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0 mysql> select * from user;
+----+------+---------+
| id | name | balance |
+----+------+---------+
| 1 | wsb | 900 |
| 2 | egon | 1010 |
| 3 | ysb | 1090 |
+----+------+---------+
3 rows in set (0.00 sec)
回滚到初始
mysql> rollback;
Query OK, 0 rows affected (0.12 sec) mysql> select * from user;
+----+------+---------+
| id | name | balance |
+----+------+---------+
| 1 | wsb | 1000 |
| 2 | egon | 1000 |
| 3 | ysb | 1000 |
+----+------+---------+
3 rows in set (0.00 sec)
commit ; 提交后 再执行 rollback; 不能回滚了
只要不执行commit; 就不会修改数据 你都可以任意回滚回去
ysql> update user set balance=900 where name='wsb'; #买支付100元
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0 mysql> update user set balance=1010 where name='egon'; #中介拿走10元
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0 mysql> update user set balance=1090 where name='ysb'; #卖家拿到90元
Query OK, 1 row affected (0.05 sec)
Rows matched: 1 Changed: 1 Warnings: 0 mysql> select * from user;
+----+------+---------+
| id | name | balance |
+----+------+---------+
| 4 | wsb | 900 |
| 5 | egon | 1010 |
| 6 | ysb | 1090 |
+----+------+---------+
3 rows in set (0.00 sec) mysql> commit;
Query OK, 0 rows affected (0.00 sec) mysql> select * from user;
+----+------+---------+
| id | name | balance |
+----+------+---------+
| 4 | wsb | 900 |
| 5 | egon | 1010 |
| 6 | ysb | 1090 |
+----+------+---------+
3 rows in set (0.00 sec) mysql> rollback;
Query OK, 0 rows affected (0.00 sec) mysql> select * from user;
+----+------+---------+
| id | name | balance |
+----+------+---------+
| 4 | wsb | 900 |
| 5 | egon | 1010 |
| 6 | ysb | 1090 |
+----+------+---------+
3 rows in set (0.00 sec)
开启事务检测sql语句的执行,如果监测到一条sql语句有错误时候,执行失败,立马所有执行回滚操作
最新文章
- 关于mysql字段时间类型timestamp默认值为当前时间问题
- 备忘:maven 中指定版本
- 用Nginx+Lua(OpenResty)开发高性能Web应用
- 在JSP中上传图片到数据库中
- 从零搭建mongo分片集群的简洁方法
- 【poj2186】 Popular Cows
- Bootstrap速学教程之简要介绍
- bzoj 3142 数学
- ReactiveCocoa框架学习1
- APP安全环节缺失,手游运营商怎样应对APP破解困境
- PYCHARM配置文件如何导入
- TML5安全:CORS(跨域资源共享)简介
- C++跨平台使用(安卓,iso等)
- Python random() 函数
- CSS问题
- DoraBox 漏洞练习平台
- ansible配置文件详解
- #WEB安全基础 : HTML/CSS | 0x11 浅谈GET和POST
- Windows 7远程桌面设置
- Java File类与文件IO流总结
热门文章
- mybatis 之 resultType=";HashMap"; parameterType=";list";
- Push rejected: Push master to origin/master was rejected /failed to push some refs to /git did not exit cleanly
- java远程连接access数据库
- U盘安装centos7:不能载入到安装界面
- linux下删除大量小文件
- 【vue基础学习】vue.js开发环境搭建
- 【Linux基础学习】Ubuntu 常用命令大全
- margin-left:10px; 不同浏览器距离为什么不一样?
- Word 2010 小技巧篇
- css修改select默认样式