您的位置:首页 > 健康 > 养生 > 室内装修设计联盟_新疆建设工程信息网网官网_肇庆seo按天收费_人工智能培训

室内装修设计联盟_新疆建设工程信息网网官网_肇庆seo按天收费_人工智能培训

2024/12/24 8:06:52 来源:https://blog.csdn.net/2301_80064376/article/details/142179617  浏览:    关键词:室内装修设计联盟_新疆建设工程信息网网官网_肇庆seo按天收费_人工智能培训
室内装修设计联盟_新疆建设工程信息网网官网_肇庆seo按天收费_人工智能培训

MySQL事务的ACID特性与应用

数据库事务 是保障数据一致性和完整性的关键机制。事务不仅是并发控制的核心,更是数据恢复的基本单位。本文将带你深入了解MySQL中的事务概念、ACID特性以及如何在实际应用中正确处理事务。

1. 什么是事务?

事务(Transaction) 是用户定义的一系列数据库操作序列,这些操作要么全部成功,要么全部失败。事务是一个不可分割的工作单位。

举例说明:银行转账

假设你要从账户A 转账10000元到账户B。这个转账操作可以定义为一个事务,包含以下两个步骤:

  1. A账户减少10000元: A = A - 10000
  2. B账户增加10000元: B = B + 10000

如果这两个操作中的任何一个失败,那么整个事务就会回滚,确保A账户的钱不会丢失

2. 事务的ACID特性

事务具有四个重要特性,统称为ACID

2.1 原子性(Atomicity)

原子性 保证了事务中的所有操作要么全部完成,要么全部不做。这是事务的最基本属性。

2.2 一致性(Consistency)

一致性 是指事务执行前后,数据库都必须处于一致性状态。换句话说,事务必须将数据库从一个有效状态 转换到另一个有效状态

2.3 隔离性(Isolation)

隔离性 保证了并发执行的事务不会互相干扰。一个事务的中间状态对其他事务是不可见的,直到该事务提交

2.4 持续性(Durability)

持续性 确保了事务一旦提交,其对数据库的修改将永久保存,即使系统崩溃也不会丢失数据。

3. 在MySQL中处理事务

MySQL中的事务处理分为隐式划分显式划分 两种方式。

3.1 隐式划分

在MySQL中,默认情况下AUTOCOMMIT 变量设置为 1,即自动提交模式。这意味着每一条修改语句都被视为一个事务,执行后立即提交。

示例: 在自动提交模式下,执行 UPDATE 语句后,修改立即生效,无需显式提交。

3.2 显式划分

当将 AUTOCOMMIT 设置为 0 时,MySQL不再自动提交事务,你需要手动控制事务的开始和结束。

  • 开始事务: 使用 START TRANSACTION 语句显式开始一个事务。
  • 提交事务: 使用 COMMIT 语句提交所有操作,将数据永久保存到磁盘。
  • 回滚事务: 使用 ROLLBACK 语句撤销所有操作,回到事务开始时的状态。

注意: MySQL中只有InnoDBBDB 存储引擎支持事务,其他存储引擎如MyISAM 不支持事务。

4. 如何提交事务

当事务正常结束后,使用 COMMIT 语句提交事务的所有操作,将其写入物理数据库。

示例:事务提交前后的数据变化

  1. 在root用户下修改数据:
SET autocommit=0;
UPDATE Department SET office='C202' WHERE dno='D1';
SELECT * FROM Department:

image

  1. 在提交前查看数据:
SELECT * FROM Department;

image

此时修改结果仅保存在内存中,其他会话无法看到变化。

  1. 提交事务:
COMMIT;
  1. 在其他会话中查看提交后的数据:
SELECT * FROM Department;

image

此时,其他用户可以看到 D1 学院的办公地点已经更新为 C202

5. 如何撤销事务

使用 ROLLBACK 语句可以撤销事务的所有操作,回到事务开始时的状态。

示例:插入、修改并回滚

  1. 开始事务并插入新记录:
START TRANSACTION;
INSERT INTO Department VALUES ('D6', '文学院', 'D206', '成立于1982年');
  1. 修改新记录:
UPDATE Department SET office='E201' WHERE dno='D6';
  1. 回滚事务:
ROLLBACK;
  1. 查看回滚后的数据:
SELECT * FROM Department;

此时,D6 的所有操作都被撤销。

6. 保存点与回滚

在复杂的事务中,可以使用保存点(SAVEPOINT) 将事务划分为多个部分。当出现问题时,可以回滚到某个保存点,而不是回滚整个事务。

示例:回滚到指定保存点

  1. 开始事务并更新数据:
START TRANSACTION;
UPDATE Department SET office='E201' WHERE dno='D1';
SAVEPOINT S1;
UPDATE Department SET office='E202' WHERE dno='D1';
SAVEPOINT S2;
UPDATE Department SET office='E203' WHERE dno='D1';
  1. 回滚到保存点S1:
ROLLBACK TO SAVEPOINT S1;

此时,S1 之后的所有操作都被撤销,事务回到 S1 的状态。

7. 事务的执行方式

7.1 串行执行

在单处理器系统中,事务可以串行执行,即一个事务完成后,再开始下一个事务。这种方式虽然简单,但会导致系统资源浪费。

image

7.2 并发执行

事务的并发执行 是指多个事务交替执行,虽然不是严格的并行执行,但可以减少处理器的空闲时间,提高系统效率。

image

提示: 并发执行可能会导致数据冲突,因此需要考虑隔离性的影响。

总结

通过本文的讲解,你应该对MySQL中的事务概念和ACID特性有了清晰的理解。事务 是数据库操作的基本单位,ACID特性 确保了事务的可靠性,而显式事务处理保存点 提供了更灵活的控制。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com