MYSQL——事务

  1. 什么是事务?
    事务是一种机制、是一种操作序列,它包含了一组数据库操作命令,这组命令要么全部执行,要么全部不执行。因此事务是一个不可分割的工作逻辑单元。在数据库系统上执行并发操作时事务是作为最小的控制单元来使用的。这特别适用于多用户同时操作的数据通信系统。例如:订票、银行、保险公司以及证券交易系统等。
    举例
    比如银行转账工作,张三转给李四500元。
    其中的操作有:张三扣500元,李四加500元。
    这两个操作要么同时执行,要么都不执行。

  2. 事务的四大属性(简称ACID)

  • 原子性(Atomicity):一个事务被视为一个不可分割的最小单元,整个事务的所有操作要么成功,要么失败。对于一个事务来说,不可能只执行其中的一部分操作。
  • 一致性(Consistency):数据库执行事务操作,只能成功或者失败。所以数据库总是从一个一致性的状态转换到另一个一致性的状态。
  • 隔离性(Isolation):一个事务在最终提交前,其中的操作对其他事务是不可见的。
  • 持久性(Durability):一旦事务提交,其中的修改操作会直接保存在数据库中。
  1. 事务基本操作语句
  • begin / start transaction:开启事务
  • commit / commit work:提交事务
  • rollback / rollback work:回滚事务
  1. 事务的保存点
  • savepoint 名称 :自定义保存点的名称和位置
  • rollback to 名称 :回滚到自定义的保存点
  • release savepoint 名称:删除保存点
  1. 事务的隔离级别
    数据库是多线程并发访问的,所以很容易出现多个线程同时开启事务的情况,这样就会出现脏读,重复读以及幻读的情况,为了避免这种情况发生,需要为事务设置隔离级别,事务中有四种隔离级别。设置隔离级别:SET [SESSION|GLOBAL] TRANSACTION ISOLATION LEVEL [READ UNCOMMITTED|READ COMMITTED|REPEATABLE READ|SERIALIZABLE]
  • READ UNCOMMITTED(读未提交)
    read uncommitted是事务中最低的级别,该级别下的事务可以读取到另一个事务中未提交的数据,也称为脏读,这是相当危险的。
  • READ COMMITTED(读提交)
    read committed是大多数数据库管理系统(Oracle)的默认隔离等级,该级别下的事务只能读取其他事务已经提交的内容,可以避免脏读,但不能避免重复读和幻读的情况。重复读是在事务内重复读取了别的线程已经提交的数据,但两次读取的结果不一致,原因是查询的过程中其他的事物做了更新的操作。幻读是指在一个事物内两次查询中数据的条数不一致,原因是查询的过程中其他的事物做了添加操作。
  • REPEATABLE READ(可重复读)
    repeatable read是MYSQL默认的事物隔离级别,它可以避免脏读,不可重复度的问题,确保同一事物的多个实例在并发读取数据时,会看到相同的数据行。会产生幻读。
  • SERIALIZABLE(可串行化)
    serializable是事物的最高隔离级别,它会强制对事物进行排序,使之不会发生冲突,从而解决脏读,幻读,重复读的问题。实际上,就是在每个读的数据行上加锁。这个级别,可能导致大量的超时现象和锁竞争,实际中很少用。
  1. 什么是脏读,不可重复读,幻读。
  • 脏读(Drity Read):
    所谓的脏读其实就是一个事务读取了另一个事务的未提交数据。
  • 不可重复读(Non-repeatable read):
    不可重复读就是事务中的两次查询结果不一致,原因是查询的过程中其他事务做了更新的操作。不可重复读和脏读类似,但是脏读是读取前一个事务未提交的脏数据,不可重复读是在事务内重复度取了别的线程已提交的数据。
  • 幻读(Phantom Read):
    幻读又被称为虚读,是指在一个事务内两次查询中数据条数不一致,幻读和不可重复度类似,同样是在两次查询过程中,不同的是,幻读是由于其他事务做了插入记录的操作,导致记录数有所增加。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值