摸鱼少学习多

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;
复制代码

 

 
posted @   北海之上  阅读(14)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗
/* 粒子吸附*/
点击右上角即可分享
微信分享提示