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