数据库事务特性、隔离级别、事务使用场景

1、数据库事务特性

什么是事物?要么都成功,要么都失败

比如 A卡里有 1000 块,B 卡有500 块
A 转账 100 到 B 卡
如果在转账的时候,只执行到一半,A 转账了,B 没收到,这样肯定是不行的

所以需要事务来保证安全性

事务原则:ACID 原则

  • 原子性
  • 一致性
  • 隔离性
  • 持久性

隔离级别

  • 读取未提交 : 有脏读的问题
  • 读取已提交:有不可重复读的问题
  • 可重复读:有幻读的问题
  • 可串行化:解决以上所有问题

2、事务转账的实例

执行事务

事务处理过程

  1. 关闭自动提交
  2. 开启一个事物
  3. 如果成功则提交
  4. 如果失败则回滚

事务结束后,开启自动提交

在这里插入图片描述

--  ========事务========
-- mysql 是默认开启事务自动提交的

SET autocommit = 0 /*关闭*/
SET autocommit = 1 /*开启*/

-- 手动去处理事务

-- 事务开启
START TRANSACTION  -- 标记一个事物,从这个之后的 SQL 都在同一个事务内

-- insert xx

-- 提交:持久化(成功!)
COMMIT

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

-- 事务结束
SET autocommit = 1 /*开启自动提交*/

模拟场景:银行转账

-- ======== 模拟银行转账案例===========
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'
UPDATE `ACCOUNT` SET money = money+500 WHERE `name`='B'

COMMIT; -- 提交事物
ROLLBACK; -- 回滚
SET autocommit = 1;

3、事务使用场景

在实际的开发过程中,一个业务操作如:转账,往往是要多次访问数据库才能完成的。转账是一个用户扣钱,另一个用户加钱。如果其中有一条 SQL 语句出现异常,这条 SQL 就可能执行失败。事务执行是一个整体,所有的 SQL 语句都必须执行成功。如果其中有 1 条 SQL 语句出现异常,则所有的 SQL 语句都要回滚,整个业务执行失败

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序猿的温柔香

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值