首页 > 数据库 >day67-sql中的事务

day67-sql中的事务

时间:2023-02-06 12:12:43浏览次数:40  
标签:autocommit 事务 SET name -- money day67 sql

事务

要么都成功要么都失败

事务原则:ACID原子性,一致性,隔离性,持久性

原子性:要么一起成功要么一起失败

一致性:针对一个事务操作前后状态一致

持久性:事务结束后的数据不会随着外界原因导致数据丢失,事务一旦提交不会逆转

隔离性:排除其他事务对本次事务的影响

脏读

一个事务读取了另一个事务未提交的数据

不可重复读

在一个事务内部读取数据,多次读取结果不同

虚读

在一个事务内读取到别的事务插入的数据,导致前后读取不一样

执行事务

 -- 事务
 -- mysql默认开启事务提交
 SET autocommit =0 -- 关闭
 SET autocommit =1 -- 开启(默认)
 ​
 -- 手动处理事务
 SET autocommit =0 -- 关闭
 ​
 -- 开启
 START TRANSACTION  -- 标记事务的开始,从此之后事务为一组
 ​
 ​
 ​
 -- 提交
 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(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 -- 提交事务
 ROLLBACK -- 回滚
 ​
 SET autocommit = 1;

 

 

标签:autocommit,事务,SET,name,--,money,day67,sql
From: https://www.cnblogs.com/GUGUZIZI/p/17094969.html

相关文章