数据库(31)——事务

事务

数据库事务(Database Transaction)是数据库管理系统(DBMS)中执行的一组逻辑操作单元,这些操作要么全部成功执行,要么全部不执行,以保持数据的一致性和完整性。事务是确保数据可靠性的重要机制之一,特别是在多用户并发访问数据库的情况下。

在MySQL中,事务(Transaction)是一组要么全部执行成功,要么全部不执行的SQL语句集合。事务的主要目的是确保数据的一致性和完整性,即使在出现错误或系统崩溃的情况下也能保护数据不受损害。

开启事务

BEGIN;

START TRANSACTION;

结束事务

结束事务分为提交和回滚

提交:COMMIT;

回滚:ROLLBACK;


演示

在初始表demo中只有一个数据

接下来使用START TRANSACTION;开启事务,并对数据库进行操作:

然后尝试使用rollback回滚,回滚后再次查询:

可以发现前面3条插入语句都被rollback撤销了,这会将数据库恢复到事务开始之前的状态。

接下来使用begin重新开启事务,并插入两条数据:

使用select语句查询:

可以发现尽管没有提交事务,但是查询数据时仍然能查到数据。

原因是MySQL使用的是InnoDB存储引擎 ,而InnoDB的默认隔离级别是REPEATABLE READ(可重复读)。

什么是隔离级别?

隔离级别

事务隔离级别是指一个事务与其他事务隔离的程度。在数据库系统中,多个事务可能会并发执行,而这些事务之间可能会相互干扰。事务隔离级别就是用来解决这种并发问题的一种机制,它规定了事务在并发执行时的行为。

SQL标准定义了四种事务隔离级别,它们分别是:

  1. 读未提交(Read Uncommitted)

    • 允许事务读取另一个事务还未提交的更改。

    • 可能导致脏读、不可重复读和幻读。

    • 在MySQL的InnoDB存储引擎中,实际上并不支持真正的读未提交隔离级别,而是会将其提升为读已提交。

  2. 读已提交(Read Committed)

    • 确保事务只能读取另一个事务已经提交的更改。

    • 避免脏读,但可能导致不可重复读和幻读。

    • 在这个级别下,每次读取都会获取数据的最新状态。

  3. 可重复读(Repeatable Read)

    • 确保在同一个事务中多次读取同一数据时,结果一致。

    • 避免脏读和不可重复读,但可能导致幻读。

    • 这是MySQL InnoDB存储引擎的默认隔离级别。

    • 在这个级别下,事务开始时建立的数据快照在整个事务期间都是可见的。

  4. 串行化(Serializable)

    • 确保事务完全串行化执行,即事务一个接一个地按顺序执行。

    • 避免脏读、不可重复读和幻读。

    • 提供最高的事务隔离级别,但并发性能最低。


在可重复读的级别下,可以看到自己事务开始时的数据状态,对于在事务内的更改依然可以通过select语句查询到,因为InnoDB允许事务内的一直性读取。

接下来提交事务:

提交事务后,数据已经成功的在数据库表上修改。

使用事务的主要好处在于它能够确保数据的一致性和完整性,同时提高系统的可靠性和稳定性。当发生故障时,也能及时的使用回滚进行恢复。

相关推荐
笃行3504 小时前
优化器凭什么改写你的 SQL:等价变换、条件调度与主流数据库的取舍
数据库
KaMeidebaby4 小时前
卡梅德生物技术快报|bli亲和力检测gst:告别批量跑胶:BLI实时酶切监测技术加速GST融合蛋白下游流程优化
前端·网络·数据库·人工智能·算法
千维百策6665 小时前
运用 SRE 原则降低生产事故影响:CRE 实战经验与可靠性优化方法
网络·数据库·人工智能
笃行3505 小时前
能跑不等于正确:生产环境不规范 SQL 的隐藏风险与编码规范
数据库
霸道流氓气质5 小时前
SpringBoot中基于 AES-GCM + KMS 密钥管理的数据加解密 Starter 实践
java·数据库·spring boot
吴声子夜歌6 小时前
MongoDB 4.x——应用设计调优
数据库·mongodb
三言老师6 小时前
CentOS7.9:Redis服务器部署结构化实战教程
linux·运维·服务器·数据库
番茄炒鸡蛋加糖6 小时前
MySQL 实战调优& 分表基础
数据库·mysql
Database_Cool_6 小时前
云数据库如何保证高可用、故障了怎么办:阿里云 RDS MySQL 高可用架构详解
数据库·mysql·阿里云
中微极客7 小时前
Veo视频生成与Gemini Agent平台集成实践
数据库·人工智能·oracle·音视频