6.MySQL中的事务

6.1什么是事务

要么都成功,要么都失败

1.SQL执行 A给B转账 A1000-->200 B200 不能说A的钱扣走了,B没收到钱。

2.SQL执行 B收到A的钱 A800---> B400 所以要么都成功要么都失败 ,不能只发生一个动作(原子性)

将一组SQL放在一个批次中去执行

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

所以要么都成功要么都失败 ,不能只发生一个动作(原子性)

事务前后的数据完整性要保持一致。ab各500他们转钱,无论咋转一起都是1000(一致性)

表示事务结束后的数据不随着外界的原因导致数据的丢失。假如传输断电了,事务没有提交就恢复到原状,事务已经提交,持久化到数据库里。事务一旦提交就不可逆(持久性)

针对多个用户同时操作,主要是排除其他事务对本次事务的影响。两个人同时给A转钱他们互不影响(隔离性)

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

不可重复读:在一个事务内读取表中的某一行数据,多次读取结果不同。(这不一定是错误,只是某些场合不对)

幻读:是指在一个事务内读取到了别的事务插入的数据,导致前后读取不一致(一般是行印象,多了一行)
执行事务:

-- 手动处理事务
SET autocommit =0    -- 关闭自动提交
-- 事务开启
START TRANSACTION  -- 标记一个事务的开始,从这个之后的sql都在同一个事务内
INSERT xx
INSERT xx
-- 提交:持久化(成功!)
COMMIT 

-- 回滚:回到原来的样子(失败!)
ROLLBACK

-- 事务结束
SET autocommit =1 -- 开启自动提交
-- 了解
SAVEPOINT 保持点名 -- 设置一个事务的保持点
ROLLBACK TO SAVEPOINT 保持点名 -- 回滚到保存点
RELEASE SAVEPOINT 保持点名  -- 撤销保存点

模拟场景

CREATE DATABASE test :代表的是创建数据库 test。

DEFAULT CHARACTER SET utf8 : 代表的是将该库的默认编码格式设置为 utf8 格式。

COLLATE utf8_general_ci : 代表的是数据库校对规则.分为三部分,分别为数据库字符集、解释不明白、区分 大小写。

ci 为 case insensitive 的缩写,即大小写不敏感。utf8_general_cs 区分大小写,

cs 为 case sensitive 的缩写,即大小写敏感。

-- 转账
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',1000.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; -- 回滚     执行1516,不执行17,执行18恢复到之前,要是提交了,就没法恢复到之前了
SET autocommit = 1;  -- 恢复默认值 ,一个一个执行下面的转账操作

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值