首页
技术小册
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.3 关闭MySQL自动提交 在MySQL数据库中,事务(Transaction)是数据库管理的一个重要特性,它确保了一系列数据库操作要么完全执行,要么完全不执行,从而维护了数据的一致性和完整性。MySQL默认开启了自动提交(Autocommit)模式,这意味着每执行一条SQL语句(如INSERT、UPDATE、DELETE等),MySQL都会自动将其视为一个事务并提交,从而立即将更改永久保存到数据库中。然而,在某些情况下,我们可能希望将多个SQL语句作为一个整体来执行,这些语句要么全部成功,要么在遇到错误时全部回滚,以保持数据的一致性。这时,关闭自动提交模式就显得尤为重要。 #### 16.1.3.1 理解自动提交模式 在自动提交模式下,MySQL的行为是每执行一个SQL语句后立即提交事务。这种模式简化了单条SQL语句的执行过程,但在需要执行复杂事务(包含多个步骤)时,却显得力不从心。因为一旦某个步骤失败,前面的更改已经提交,无法回滚,这就可能导致数据不一致的问题。 #### 16.1.3.2 关闭自动提交 要关闭MySQL的自动提交模式,可以使用SQL命令`SET autocommit = 0;`。执行这条命令后,MySQL将不再自动提交每个SQL语句,而是需要用户显式地通过`COMMIT;`命令来提交事务,或者使用`ROLLBACK;`命令来回滚事务。 **示例**: ```sql -- 关闭自动提交 SET autocommit = 0; -- 执行一系列SQL语句 INSERT INTO users (name, email) VALUES ('Alice', 'alice@example.com'); UPDATE accounts SET balance = balance - 100 WHERE user_id = LAST_INSERT_ID(); -- 如果上述操作均成功,则提交事务 COMMIT; -- 如果在某个点出现错误,则回滚事务 -- ROLLBACK; -- 重新开启自动提交(可选) SET autocommit = 1; ``` 在上述示例中,我们首先关闭了自动提交模式,然后执行了两个SQL语句:一个用于向`users`表中插入新用户,另一个用于更新`accounts`表中该用户的账户余额。如果这两个操作都成功执行,我们通过`COMMIT;`命令提交事务,使更改永久生效。如果在执行过程中遇到任何错误(比如余额不足),我们可以使用`ROLLBACK;`命令来回滚事务,撤销所有更改,保持数据的一致性。 #### 16.1.3.3 事务的ACID特性 关闭自动提交并使用显式的事务控制,有助于我们更好地理解和利用MySQL的事务特性,即ACID特性: - **原子性(Atomicity)**:事务被视为不可分割的最小工作单元,事务中的所有操作要么全部提交成功,要么全部失败回滚,作为一个整体对外呈现。 - **一致性(Consistency)**:事务必须使数据库从一个一致性状态变换到另一个一致性状态。事务执行的结果必须是使数据库从一个合法的状态转移到另一个合法的状态。 - **隔离性(Isolation)**:数据库系统提供一定的隔离机制,使得事务在不受外部并发操作干扰的“独立”环境执行。这样可以避免由于并发操作导致的数据不一致问题。 - **持久性(Durability)**:一旦事务被提交,它对数据库的修改就是永久性的,接下来的其他操作和数据库故障不应该对其有任何影响。 #### 16.1.3.4 注意事项 - **性能影响**:虽然关闭自动提交并显式控制事务可以提高数据的一致性,但也可能对数据库性能产生影响,因为频繁的事务提交或回滚会增加数据库的I/O负担。因此,在设计数据库应用时,需要权衡一致性和性能之间的需求。 - **错误处理**:在编写涉及事务的SQL代码时,务必添加适当的错误处理逻辑,以便在事务执行过程中遇到错误时能够正确地回滚事务,避免数据不一致的问题。 - **隔离级别**:MySQL提供了四种事务隔离级别(READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ、SERIALIZABLE),不同的隔离级别对并发事务的处理方式不同,也影响着数据的一致性和性能。开发者需要根据实际应用场景选择合适的隔离级别。 #### 16.1.3.5 应用场景 关闭自动提交并显式控制事务的场景包括但不限于: - 金融交易系统:确保资金转账、订单处理等操作的原子性和一致性。 - 库存管理系统:在商品出库、入库等操作中,确保库存数据的准确性。 - 用户注册与认证系统:在用户信息录入、权限分配等过程中,确保数据的一致性和完整性。 总之,关闭MySQL的自动提交模式并显式控制事务,是数据库应用中处理复杂业务逻辑、确保数据一致性和完整性的重要手段。通过合理利用事务的ACID特性,开发者可以构建出健壮、可靠的数据库应用系统。
上一篇:
16.1.2 事务机制的必要性
下一篇:
16.1.4 事务回滚
该分类下的相关小册推荐:
MySQL 实战 45 讲
MySQL从入门到精通(三)
MySQL从入门到精通(五)
SQL零基础到熟练应用(增删改查)
MySQL8.0入门与实践
MySQL必会核心问题
MySQL从入门到精通(二)
细说MySQL(零基础到高级应用)
MySQL从入门到精通(一)