MySQL - TCL

事务概述

什么是数据库事务

是一条或一组sql语句组成的执行单元,这个执行单元里的sql语句要么全部执行成功,要么全部执行失败。

事务ACID特性

  • 原子性(Atomicity)
    事务的所有操作是不可分割的,要么全部完成,要么全部不完成,不能停在中间的某个操作上。
  • 一致性(Consistency)
    一个事务执行前后数据的完整性要保持一致。以转账为例:
    转账前:张三账户500元,李四账户500元,二者总金额1000元;
    转账操作:张三转给李四100元;
    转账后:张三400元,李四600元,二者总金额还是1000元。
转100元给李四
张三 500元
李四 500元
  • 隔离性(Isolation)
    一个事务执行操作的数据不能其它事务的影响,针对的是指并发事务之间。
  • 持久性(Durability)
    事务一旦完成,对数据的更改是永久性的,不会受数据库故障影响。

事务并发可能引起的问题

  • 脏读
    事务T1读取了事务T2更新还未提交的数据,若T2回滚事务,则T1读取的数据是临时且无效的。
  • 不可重复读
    事务T1读取了一个字段,之后事务T2更新了该字段,当事务T1再次读取该字段时,看到的数据前后不一样。
  • 幻读
    事务T1读取一个字段后,事务T2在该字段的所在表插入一些行后,当事务T1再次读取时多出了一些行。

事务的隔离级别

一个事务与其它事务隔离的程度称为隔离程度。不同的隔离级别可解决不同的事务并发问题。

隔离级别脏读不可重复读幻读
READ UNCOMMITTED
READ COMMITTED
REPEATABLE READ
SERIALIZABLE
注:√表示在此事务隔离级别下事务并发仍会出现的问题。

MySQL默认的隔离级别是REPEATABLE READ
MySQL对于以上4种隔离级别都支持

MySQL TCL语法

使用事务的SQL模板:

SET autocommit = 0;	/*关闭自动提交功能*/
[START TRANSACTION;]
[DML 语句]
COMMIT | ROLLBACK [TO <保存点>];

设置事务隔离级别

SET session|global transaction isolation level <隔离级别名>;

查看当前隔离级别

SELECT @@tx_isolation;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值