CC00034.bigdatajava——|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;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yanqi_vip

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值