MySQL数据库 —— 事务管理

目录

1.初识事务

1.1 引入

2. 事务的基本操作

2.1 基础语法

2.2 注意

3. 事务的隔离级别

3.1 无隔离性问题

3.1 事务的隔离级别

4. 事务的ACID特性


1.初识事务

事务是一组DML语句组成,这些语句在逻辑上存在相关性。这一组DML语句是一个整体,要么全部成功,要么全部失败。

事务还规定不同的客户端看到的数据是不同的。

  • 1.1 引入

    • 火车站卖票
      • 当A买了编号为1的车票,而数据库还没有更新的时候。B仍能看到1号车票的存在,B也买了这张车票。这就出现了一张票多次卖的情况。

2. 事务的基本操作

  • 2.1 基础语法

    • 开始事务
      • start transaction;
    • 创建保存点
      • savepoint 保存点名;
    • 回退
      • rollback to 保存点名
  • 2.2 注意

    • 若没有设置保存点,则直接回退到事务开始处(未提交的情况下)
    • 若事务被提交(commit),无法回退(roolback)
    • 可以选择回退到哪一个保存点
    • InnoDB支持事务,MyISAM不支持事务

3. 事务的隔离级别

  • 为了对多个客户端同时操作数据库的某个表进行隔离,MySQL提供了隔离级别
  • 隔离机制:使得不同的事务在操作数据时,具有隔离性。从而保证数据的一致性。
  • 3.1 无隔离性问题

    • 脏读
      • 当一个事务正在访问数据,并对数据进行了修改,但还未提交至数据库中。另一个事务访问并使用了这个数据。
    • 不可重复读(不能读到相同的数据内容) -> 修改
      • 在一个事务内,多次读取同一个数据。在多次读取之间,另一个事务访问了该数据并进行了修改,那么第一个事务多次读取的内容是不同的。
    • 幻读  ->  新增或删除
      • 第一个事务对表中的数据进行修改,操作了全部数据行。同时,第二个事务插入了一条新数据。那么第一个事物就如同出现了幻觉一样(我不是修改了所有数据行了么,这个怎么没有被修改?)
  • 3.1 事务的隔离级别

隔离级别脏读不可重复读幻读加锁读

                  读未提交

         read uncommitted

不加锁

                   读已提交

            read committed

×不加锁

                  可重复读

            repeatable read

×××不加锁

                  可串行化

                serializable

×××加锁
  • 设置事务隔离级别
    • set session transaction isolation level read uncommitted;
  • 查看当前的隔离级别
    • select @@tx_isolation;
  • MySQL默认的隔离级别是可重复读
  • 事务的隔离级别和数据库的并发性是对立的

4. 事务的ACID特性

  • 原子性
    • 事务是一个不可分割的工作单位,要么都发生,要么都不发生
  • 一致性
    • 事务可以封装状态改变,初始状态与最终状态都是一致的。
  • 隔离性
    • 多个用户并发访问数据库时,数据库为每一个用户开启的事务不被其他事务的操作数据所干扰。
  • 持久性
    • 一个事务一旦被提交,对数据库中的数据的修改就是永久的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值