|NO.Z.00034|——————————|BigDataEnd|——|Java&MySQL单表/约束/事务.V12|——|MySQL.v12|mysql手动提交事务|

一、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;

 
 
 
 
 
 
 
 
 

Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart
                                                                                                                                                   ——W.S.Landor

 

posted on 2022-04-05 13:32  yanqi_vip  阅读(604)  评论(0)    收藏  举报

导航