首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
11.1 索引概述
11.1.1 MySQL索引概述
11.1.2 MySQL索引分类
11.2 创建索引
11.2.1 在建立数据表时创建索引
11.2.2 在已建立的数据表中创建索引
11.2.3 修改数据表结构以为数据表添加索引
11.3 删除索引
12.1 视图概述
12.1.1 视图的概念
12.1.2 视图的作用
12.2 创建视图
12.2.1 查看创建视图的权限
12.2.2 创建视图
12.2.3 创建视图的注意事项
12.3 视图操作
12.3.1 查看视图
12.3.2 修改视图
12.3.3 更新视图
12.3.4 删除视图
第13章 数据完整性约束
13.1 定义完整性约束
13.1.1 实体完整性
13.1.2 参照完整性
13.1.3 用户定义完整性
13.2 命名完整性约束
13.3 更新完整性约束
13.3.1 删除完整性约束
13.3.2 修改完整性约束
第14章 存储过程与存储函数
14.1 创建存储过程和存储函数
14.1.1 创建存储过程
14.1.2 创建存储函数
14.1.3 变量的应用
14.1.4 光标的应用
14.2 调用存储过程和存储函数
14.2.1 调用存储过程
14.2.2 调用存储函数
14.3 查看存储过程和存储函数
14.3.1 SHOW STATUS语句
14.3.2 SHOW CREATE语句
14.4 修改存储过程和存储函数
14.5 删除存储过程和存储函数
15.1 MySQL触发器
15.1.1 创建MySQL触发器
15.1.2 创建具有多条执行语句的触发器
15.2 查看触发器
15.2.1 SHOW TRIGGERS语句
15.2.2 查看triggers表中触发器信息
15.3 使用触发器
15.3.1 触发器的执行顺序
15.3.2 使用触发器维护冗余数据
15.4 删除触发器
第16章 事务
16.1 事务机制
16.1.1 事务的概念
16.1.2 事务机制的必要性
16.1.3 关闭MySQL自动提交
16.1.4 事务回滚
16.1.5 事务提交
16.1.6 MySQL中的事务
16.1.7 回退点
16.2 锁机制
16.2.1 MySQL锁机制的基本知识
16.2.2 MyISAM表的表级锁
16.2.3 InnoDB表的行级锁
16.2.4 死锁的概念与避免
16.3 事务的隔离级别
16.3.1 事务的隔离级别与并发问题
16.3.2 设置事务的隔离级别
当前位置:
首页>>
技术小册>>
MySQL从入门到精通(四)
小册名称:MySQL从入门到精通(四)
### 16.1.6 MySQL中的事务 在数据库管理系统中,事务(Transaction)是一个至关重要的概念,它确保了数据的一致性和完整性,使得数据库操作能够作为一个不可分割的工作单元来执行。MySQL作为一个流行的关系型数据库管理系统,自然支持事务处理,特别是在其支持InnoDB存储引擎时,事务处理的能力尤为强大。本章节将深入探讨MySQL中的事务机制,包括事务的基本概念、特性(ACID属性)、如何开始和结束事务、事务的隔离级别以及事务的并发控制等内容。 #### 16.1.6.1 事务的基本概念 事务是由一系列SQL语句组成的逻辑处理单元,这些语句要么全部执行成功,要么在遇到错误时全部不执行,从而保持数据库的一致性状态。事务是数据库管理系统(DBMS)执行过程中的一个逻辑单位,由DBMS中的事务管理子系统负责事务的处理。 事务具有四个基本特性,即ACID属性: - **原子性(Atomicity)**:事务中的所有操作要么全部完成,要么全部不执行,不会结束在中间某个环节。事务在执行过程中发生错误会被回滚(Rollback)到事务开始前的状态,就像这个事务从未执行过一样。 - **一致性(Consistency)**:事务必须使数据库从一个一致性状态变换到另一个一致性状态。事务的结束意味着系统状态是一致的,不会因为事务的执行而导致数据库状态的不一致。 - **隔离性(Isolation)**:数据库系统提供一定的隔离机制,使得并发执行的事务之间不会互相干扰,即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。 - **持久性(Durability)**:一旦事务被提交,它对数据库的改变就应该是永久性的,接下来的其他操作或故障不应该对其有任何影响。 #### 16.1.6.2 开始和结束事务 在MySQL中,可以通过SQL语句显式地控制事务的开始和结束。默认情况下,MySQL的自动提交模式(autocommit)是开启的,这意味着每个独立的SQL语句都被视为一个事务并自动提交。要显式地控制事务,首先需要关闭自动提交模式。 - **关闭自动提交**: ```sql SET autocommit = 0; ``` 或者,在会话开始时使用`--autocommit=0`选项启动MySQL客户端。 - **开始事务**: 实际上,在关闭了自动提交模式后,执行的第一条修改数据的SQL语句就隐式地开始了一个事务。但为了明确起见,可以使用`START TRANSACTION`或`BEGIN`语句来显式地开始一个事务。 ```sql START TRANSACTION; -- 或者 BEGIN; ``` - **提交事务**: 使用`COMMIT`语句来提交事务,将事务中所有对数据库的修改永久保存到数据库中。 ```sql COMMIT; ``` - **回滚事务**: 如果事务执行过程中遇到错误或需要撤销事务中的所有操作,可以使用`ROLLBACK`语句来回滚事务,使数据库回到事务开始前的状态。 ```sql ROLLBACK; ``` #### 16.1.6.3 事务的隔离级别 事务的隔离性是通过锁机制和MVCC(多版本并发控制)等机制来实现的,但不同的隔离级别会影响并发事务的执行结果。MySQL支持以下四种标准的事务隔离级别: 1. **READ UNCOMMITTED(读未提交)**: 最低的隔离级别,允许一个事务读取另一个事务未提交的数据。这可能导致脏读(Dirty Read)、不可重复读(Non-repeatable Read)和幻读(Phantom Read)问题。 2. **READ COMMITTED(读已提交)**: 保证一个事务不会读取另一个事务未提交的数据,即只允许读取已经提交的数据。可以避免脏读,但不可重复读和幻读仍可能发生。 3. **REPEATABLE READ(可重复读)**: MySQL的默认隔离级别。保证在同一个事务中多次读取同样记录的结果是一致的,即避免了脏读和不可重复读,但幻读仍可能发生。 4. **SERIALIZABLE(可串行化)**: 最高的隔离级别,强制事务串行执行,即事务只能一个接一个地执行,避免了脏读、不可重复读和幻读,但牺牲了系统的并发性能。 可以通过设置`transaction_isolation`系统变量来更改事务的隔离级别: ```sql SET SESSION transaction_isolation = 'READ-COMMITTED'; -- 或者 SET GLOBAL transaction_isolation = 'REPEATABLE-READ'; ``` #### 16.1.6.4 锁机制与并发控制 MySQL中的事务并发控制主要依赖于锁机制。锁是数据库管理系统控制并发事务的一种手段,用于保证事务的隔离性和数据的一致性。MySQL中主要有两种类型的锁:共享锁(S锁)和排他锁(X锁)。 - **共享锁**:允许事务读取一条记录,阻止其他事务获得相同记录的排他锁。 - **排他锁**:允许事务更新或删除一条记录,阻止其他事务获得相同记录的任何类型的锁。 InnoDB存储引擎还实现了行级锁(Row-Level Locking)和表级锁(Table-Level Locking),以及意向锁(Intention Locks)等高级锁机制,以更细粒度地控制并发事务的访问。 此外,InnoDB还通过MVCC(多版本并发控制)技术进一步提高了并发性能。MVCC允许多个事务同时读取同一数据行的不同版本,从而避免了读操作对写操作的阻塞,以及写操作之间的直接冲突。 #### 16.1.6.5 实际应用中的事务处理 在实际应用中,事务处理是确保数据一致性和业务逻辑正确性的关键。例如,在电子商务系统中,当用户下单购买商品时,通常需要执行以下操作: 1. 检查库存是否足够。 2. 扣除库存。 3. 更新用户账户余额或生成订单。 这些操作必须作为一个整体来执行,要么全部成功,要么在遇到任何错误时全部撤销。通过使用事务,可以确保这些操作的原子性,从而保护系统的数据一致性。 #### 结论 MySQL中的事务处理是数据库管理系统提供的重要功能之一,它通过ACID属性保证了数据的一致性和完整性。通过明确控制事务的开始、提交和回滚,以及合理选择事务的隔离级别和利用锁机制,可以有效地管理并发事务,提高系统的可靠性和性能。在实际应用中,合理设计事务逻辑,确保业务操作的原子性,是构建稳定、可靠的数据库应用系统的关键。
上一篇:
16.1.5 事务提交
下一篇:
16.1.7 回退点
该分类下的相关小册推荐:
MySQL从入门到精通(二)
MySQL必会核心问题
MySQL从入门到精通(五)
SQL零基础到熟练应用(增删改查)
MySQL8.0入门与实践
MySQL 实战 45 讲
MySQL从入门到精通(一)
细说MySQL(零基础到高级应用)
MySQL从入门到精通(三)