一、mysql手动提交事务:
功能 | 语句 |
开启事务 | start transaction; 或者 BEGIN; |
提交事务 | commit; |
回滚事务 | rollback; |
### --- 语法格式
——> START TRANSACTION
——> 这个语句显式地标记一个事务的起始点。
——> COMMIT
——> 表示提交事务,即提交事务的所有操作,具体地说,
——> 就是将事务中所有对数据库的更新都写到磁盘上的物理数据库中,事务正常结束。
——> ROLLBACK
——> 表示撤销事务,即在事务运行的过程中发生了某种故障,事务不能继续执行,
——> 系统将事务中对数据库的所有已完成的操作全部撤销,回滚到事务开始时的状态
二、手动提交事务流程
### --- 手动提交事务流程
——> 执行成功的情况: 开启事务 -> 执行多条 SQL 语句 -> 成功提交事务
——> 执行失败的情况: 开启事务 -> 执行多条 SQL 语句 -> 事务的回滚
三、成功案例演示
### --- 模拟张三给李四转500元钱
~~~ # 开启事务
start transaction;
~~~ # tom账户 -500
update account set money = money - 500 where name = 'tom'
~~~ # jack账户 +500
update account set money = money + 500 where name = 'jack';
~~~ # 此时我们使用 sqlYog查看表,发现数据并没有改变
~~~ # 在控制台执行 commit 提交事务
commit;
~~~ # 再次使用sqlYog查看, 发现数据在事务提交之后,发生改变
四、事务回滚演示
### --- 如果事务中,有某条sql语句执行时报错了,我们没有手动的commit,那整个事务会自动回滚
~~~ # 命令行,开启事务
start transaction;
~~~ # 插入两条数据
INSERT INTO account VALUES(NULL,'张百万',3000);
INSERT INTO account VALUES(NULL,'有财',3500);
~~~ # 不去提交事务 直接关闭窗口,发生回滚操作,数据没有改变
——> 如果事务中 SQL 语句没有问题,commit 提交事务,会对数据库数据的数据进行改变。
——> 如果事务中 SQL 语句有问题,rollback 回滚事务,会回退到开启事务时的状态。
五、sql语句
### --- sql语句
/*
MySql事务操作
手动提交事务
1.开启事务 start transaction; 或者 begin;
2.提交事务 commit;
3.回滚事务 rollback;
自动提交事务
MySql默认的提交方式 自动提交事务
每执行一条DML语句 都是一个单独的事务
*/
-- 手动提交事务演示
-- 成功案例
USE db2;
START TRANSACTION; -- 开启事务
UPDATE account SET money = money - 500 WHERE NAME = 'tom'
UPDATE account SET money = money + 500 WHERE NAME = 'jack';
COMMIT; -- 提交事务
-- 失败案例 会进行回滚
START TRANSACTION; -- 开启事务
INSERT INTO account VALUES(NULL,'张百万',3000);
INSERT INTO account VALUES(NULL,'有财',3500);
-- 直接关闭窗口 模拟系统崩溃 数据没有发生改变
-- 如果事务中 SQL 语句没有问题,commit 提交事务,会对数据库数据的数据进行改变。 如果事务中 SQL 语句有问题,rollback 回滚事务,会回退到开启事务时的状态。
-- 自动提交事务 MySQL 默认每一条 DML(增删改)语句都是一个单独的事务
-- 登录mysql,查看autocommit状态。
SHOW VARIABLES LIKE 'autocommit';
-- 把 autocommit 改成 off;
SET @@autocommit=off;
-- 执行修改操作
-- 选择数据库
USE db2;
-- 修改数据
UPDATE account SET money = money - 500 WHERE NAME = 'jack';
-- 手动提交
COMMIT;