事务测试

发布时间 2023-12-11 19:40:36作者: 同学?

/*事务
mysql 是默认开启事件自动提交的 */
SET autocommit = 0/*关闭*/
SET autocommit = 1/*开启(默认的)*/
-- 手动处理事务
-- 事务开启
START TRANSACTION -- 标记一个事务的开始,从这个之后的sql都在同一个事务内
INSERT xx
INSERT xx
-- 提交;持久化(成功!)
COMMIT
-- 事务结束
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(30) NOT NULL,
`moner` DECIMAL(10,5)NOT NULL,
PRIMARY KEY(`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8
INSERT INTO account(`name`,`money`)
VALUES ('C',3000.00),('D',4000.00)
ALTER TABLE`account`CHANGE `moner` `money`DECIMAL(10,1)-- 改名

-- 模拟转账:事务
SET autocommit = 0;-- 关闭自动提交
START TRANSACTION-- 开启一个事务
UPDATE account SET money = money-500 WHERE`name` = 'A'-- a减500
UPDATE account SET money = money+500 WHERE`name` = 'C'-- C加500
COMMIT;-- 提交事务
ROLLBACK;-- 回滚
SET autocommit = 1;-- 恢复自动提交