手工事务-2022-12-1
-- MYSQL 是默认开启事务自动提交的
SET autocommit = 0 -- 关闭
SET autocommit = 1 -- 自动开启 默认的
-- 手动处理事务
SET autocommit = 0 -- 关闭 自动提交
-- 开启事务
START TRANSACTION -- 标记事务开始,从这个之后都在同一个事务中
INSERT xx
INSERT xx
-- 提交 持久化 (成功)
COMMIT
-- 回滚 回到原来的样子 (失败)
ROLLBACK
-- 结束事务
SET autocommit = 1 -- 开启自动开启 默认的
-- 设置保存点 了解即可 ,事务的保存点
SAVEPOINT
ROLLBACK TO SAVEPOINT 回滚到保存点
RELEASE SAVEPOINT 撤销保存点
-- 案例
CREATE DATABASE shop CHARACTER SET utf8 COLLATE utf8_general_ci
USE shop
CREATE TABLE `account`(
`id` INT(3) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(20) 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';
UPDATE account SET money = money+500 WHERE `name` = 'B';
COMMIT; -- 永久性
ROLLBACK;
SET autocommit = 1;