MySQL测试事务实现转账

MySQL 是默认开启事务自动提交的
SET autocommit=0 – 关闭
SET autocommit=1 – 开启(默认)

手动处理事务步骤:
在这里插入图片描述

-- 手动处理事务
SET autocommit = 0 -- 关闭自动提交
-- 事务开启
START TRANSACTION -- 标记一个事务的开始,从这个之后的sql都在同一个事务内

-- 提交:持久化(成功)
COMMIT
-- 回滚:回到原来的状态(失败!)
ROLLBACK

-- 事务结束
SET autocommit=1 -- 开启自动提交

了解:

-- 了解
SAVEPOINT 保存点名 -- 设置一个事务的保持点
ROLLBACK TO SAVEPOINT 保存点名 -- 回滚到保存点
RELEASE SAVEPOINT 保存点名 -- 撤销保存点

MySQL测试事务实现转账

执行:

-- 转账
CREATE DATABASE shop CHARSET utf8 COLLATE utf8_general_ci -- 创建数据库
USE shop-- 使用数据库

-- 创建表
CREATE TABLE `account`(
`id` INT(3) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(30) NOT NULL,
`money` DECIMAL(9,2) NOT NULL,
PRIMARY KEY(`id`)
)ENGINE=INNODB DEFAULT CHARSET utf8

-- 插入数据
INSERT INTO `account`(`name`,`money`) VALUES("A",2000.00),("B",10000.00)

在这里插入图片描述

-- 模拟转账:事务
SET autocommit=0 -- 关闭自动提交
START TRANSACTION -- 开启一个事务
UPDATE `account` SET `money`=`money`-500 WHERE `name`="A" -- A 减500
UPDATE `account` SET `money`=`money`+500 WHERE `name`="B" -- B 加500

COMMIT -- 提交事务
SET autocommit=1

在这里插入图片描述

TRUNCATE TABLE `account`
INSERT INTO `account`(`name`,`money`) VALUES("A",2000.00),("B",10000.00)

在这里插入图片描述

-- 模拟转账:事务
SET autocommit=0 -- 关闭自动提交
START TRANSACTION -- 开启一个事务
UPDATE `account` SET `money`=`money`-500 WHERE `name`="A" -- A 减500
UPDATE `account` SET `money`=`money`+500 WHERE `name`="B" -- B 加500

ROLLBACK -- 回滚
SET autocommit=1

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/I_r_o_n_M_a_n/article/details/114303811
今日推荐