MySQL——事务控制语言(TCL)

本文深入探讨了数据库事务的概念,包括其ACID特性:原子性、一致性、隔离性和持久性。介绍了隐式和显式事务的区别,并详细讲解了如何在MySQL中开启、提交和回滚事务。此外,还讨论了事务隔离级别及其对并发问题的影响,以及如何设置和查看事务隔离级别。最后,提到了回滚点的使用和delete与truncate在事务中的不同。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

事务概念

事务指的是一个或一组sql语句组成一个执行单元,在这个单元中,sql语句相互依赖。这个执行单元要么全部执行,要么全不执行。

ACID属性

  1. 原子性(atomicity):事务是一个不可分割的各种单位,要么都发生,要么都不发生。
  2. 一致性(consistency):事务必须使数据库从一个一致性状态变换到另一个一致性状态
  3. 隔离性(isolation):一个事务的执行不能被其它事务干扰。
  4. 持久性(durability):一旦事务被提交,它对数据库中数据的改变是永久性的,接下来的操作和数据库故障都不应对其有影响。

事务分类

隐式事务:没有明显的开启和结束标记。如:insert,update,delete语句等
显式事务:有明显的开启和结束标记,前提是先设置自动提交功能(autocommit)为禁用(off)。
如果要查看变量的参数可以通过:show variables like ‘%变量名%’,如此处可以写成

SHOW VARIABLES LIKE '%autocommit%';

显式事务

  1. 开启事务
SET autocommit=0;
#将自动提交功能禁用
START TRANSACTION;
#这一步可以不写,如果写了则表示默认开启事务

注:该操作只对当前事务有效,并非永久关闭。

  1. 编写事务中的sql语句(select insert update delete,DDL语言没有事务之说)
  2. 结束事务
    两个代码二选一即可
commit;
#提交事务

rollback;
#回滚事务:最后并不提交,而是返回事务前的状态

事务隔离级别

运行多个事务时会导致一些并发问题:
在这里插入图片描述
注意:这些问题都是在两个事务进行时发生的。举例来说就是,如果T1在更改数据,T2在T1更改前后分别读取的数据不一致,则是脏读;但是如果T2结束后,重开一个事务读取了T1更新的数据,并与T2不一致,并不算做脏读。
四种事务隔离级别:
在这里插入图片描述
随着隔离级别的升高,效率会降低。MySQL默认的是repeatable read。

  • 查看当前事务隔离级别:
SELECT @@tx_isolation;
  • 设置隔离级别
SET TRANSACTION ISOLATION LEVEL 隔离级别;
#设置当前MySQL连接的隔离级别

SET GLOBAL TRANSACTION ISOLATION LEVEL 隔离级别;
#设置全局的隔离级别

回滚点(savepoint)

指搭配rollback使用
例:


SET autocommit=0;
START TRANSACTION;
DELETE FROM account WHERE id=25;
SAVEPOINT a;#设置保存点,取名为a
DELETE FROM account WHERE id=29;
ROLLBACK;#回滚至保存点

delete和truncate在事务中的区别
truncate是实际的删除,不支持回滚,但是delete支持。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值