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

文章目录

    • 1、数据库事务特性
    • 2、事务转账的实例
    • 3、事务使用场景

1、数据库事务特性

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

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

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

事务原则:ACID 原则

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

隔离级别

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

2、事务转账的实例

执行事务

事务处理过程

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

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

数据库事务特性、隔离级别、事务使用场景_第1张图片

--  ========事务========
-- 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 语句都要回滚,整个业务执行失败

你可能感兴趣的:(学习篇---数据库MySQL,数据库事务,事务四大特性,事务隔离级别,操作事务,mysql,数据库)