关于MySQL事务处理学习记 START TRANSACTION, COMMIT和ROLLBACK语法 START TRANSACTION | BEGIN [WORK] COMMIT [WORK] [AND [NO] CHAIN] [[NO] RELEASE] ROLLBACK [WORK] [AND [NO] CHAIN] [[NO] RELEASE] SET AUTOCOMMIT = {0 | 1}
START TRANSACTION或BEGIN语句可以开始一项新的事务。COMMIT可以提交当前事务,是变更成为永久变更。ROLLBACK可以 回滚当前事务,取消其变更。SET AUTOCOMMIT语句可以禁用或启用默认的autocommit模式,用于当前连接。
自选的WORK关键词被支持,用于COMMIT和RELEASE,与CHAIN和RELEASE子句。CHAIN和RELEASE可以被用于对事务完成进行附加控制。Completion_type系统变量的值决定了默认完成的性质。
AND CHAIN子句会在当前事务结束时,立刻启动一个新事务,并且新事务与刚结束的事务有相同的隔离等级。RELEASE子句在终止了当前事务后,会让服务器断开与当前客户端的连接。包含NO关键词可以抑制CHAIN或RELEASE完成。如果completion_type系统变量被设置为一定的值,使连锁或释放完成可以默认进行,此时NO关键词有用。
默认情况下,MySQL采用autocommit模式运行。这意味着,当您执行一个用于更新(修改)表的语句之后,MySQL立刻把更新存储到磁盘中。
如果您正在使用一个事务安全型的存储引擎(如InnoDB, BDB或NDB簇),则您可以使用以下语句禁用autocommit模式:
SET AUTOCOMMIT=0; 通过把AUTOCOMMIT变量设置为零,禁用autocommit模式之后,您必须使用COMMIT把变更存储到磁盘中,或着如果您想要忽略从事务开始进行以来做出的变更,使用ROLLBACK。
如果您想要对于一个单一系列的语句禁用autocommit模式,则您可以使用START TRANSACTION语句:
START TRANSACTION; SELECT @A:=SUM(salary) FROM table1 WHERE type=1; UPDATE table2 SET summary=@A WHERE type=1; COMMIT; 使用START TRANSACTION,autocommit仍然被禁用,直到您使用COMMIT或ROLLBACK结束事务为止。然后autocommit模式恢复到原来的状态。
BEGIN和BEGIN WORK被作为START TRANSACTION的别名受到支持,用于对事务进行初始化。START TRANSACTION是标准的SQL语法,并且是启动一个ad-hoc事务的推荐方法。BEGIN语句与BEGIN关键词的使用不同。BEGIN关键词可以启动一个BEGIN...END复合语句。后者不会开始一项事务。
您也可以按照如下方法开始一项事务:
START TRANSACTION WITH CONSISTENT SNAPSHOT;
WITH CONSISTENT SNAPSHOT子句用于启动一个一致的读取,用于具有此类功能的存储引擎。目前,该子句只适用于InnoDB。该子句的效果与发布一个START TRANSACTION,后面跟一个来自任何InnoDB表的SELECT的效果一样。请参见15.2.10.4节,“一致的非锁定读”。
开始一项事务会造成一个隐含的UNLOCK TABLES被执行。
为了获得最好的结果,事务应只使用由单一事务存储引擎管理的表执行。否则,会出现以下问题:
如果您使用的表来自多个事务安全型存储引擎(例如InnoDB和BDB),并且事务隔离等级不是SERIALIZABLE,则有可能当一个事务提交时,其它正在进行中的、使用同样的表的事务将只会发生由第一个事务产生的变更。也就是,用混合引擎不能保证事务的原子性,并会造成不一致。(如果混合引擎事务不经常有,则您可以根据需要使用SET TRANSACTION ISOLATION LEVEL把隔离等级设置到SERIALIZABLE。)
如果您在事务中使用非事务安全型表,则对这些表的任何变更被立刻存储,不论autocommit模式的状态如何。
如果您在更新了事务中一个事务表之后,发布一个ROLLBACK语句,则会出现一个ER_WARNING_NOT_COMPLETE_ROLLBACK警告。对事务安全型表的变更被 回滚,但是对非事务安全型表没有变更。
每个事务被存储在一个组块中的二进制日志中,在COMMIT之上。被回滚的事务不被计入日志。(例外情况:对非事务表的更改不会被 回滚。如果一个被回滚的事务包括对非事务表的更改,则整个事务使用一个在末端的ROLLBACK语句计入日志,以确保对这些表的更改进行复制。)
您可以使用SET TRANSACTION ISOLATION LEVEL更改事务的隔离等级。
回滚可以慢速运行。在用户没有明确要求时,也可以进行回滚(例如,当错误发生时)。因此,在明确地和隐含的(ROLLBACK SQL命令)回滚时,SHOW PROCESSLIST会在Stage列中显示Rolling back,用于连接。
分享到:
相关推荐
MySQL事务是数据库操作的核心概念,尤其对于保证数据一致性至关重要。事务是数据库系统执行逻辑操作的基本单位,具有四个关键特性:原子性、一致性、隔离性和持久性。 1. 原子性(Atomicity):原子性确保事务中的...
- MySQL支持多种存储引擎,如InnoDB(默认,支持事务处理和外键)、MyISAM(非事务处理,快速读取)等。 - 选择合适的存储引擎取决于应用需求,如并发性、事务处理、空间效率等。 8. **性能优化**: - 使用...
在VB(Visual Basic 6)中与...通过分析这些文件,我们可以学习如何在VB6中构建一个简单的数据库应用,包括数据库连接、SQL命令的执行以及数据的处理。如果想要深入理解这个项目,需要打开并研究每个文件的具体内容。
12. **InnoDB和MyISAM引擎**: MySQL中的两种主要存储引擎,InnoDB支持事务处理和行级锁定,MyISAM则以读取速度快著称。 如果"mySQL学习记录.zip"包含的"Kwan1117"是某个具体的文件或目录名,可能指向一个笔记文档、...
在事务处理中,存储过程能够确保一组操作的原子性,即使在发生错误时也能保持数据的一致性。 在实际应用中,存储过程广泛用于业务逻辑复杂的场景,如数据清洗、报表生成、批处理操作等。例如,一个存储过程可能用于...
源代码分析能够帮助我们理解MySQL内部的工作机制,包括查询处理、存储引擎、事务处理、并发控制、索引构建等核心功能。 MySQL源代码的结构复杂且庞大,包含了各种组件和模块。`ChangeSet`可能是版本控制文件,记录...
2. 在查询中使用`FOR UPDATE`来锁定待检查的行,防止在事务处理过程中被其他事务修改。 3. 确保数据库表使用支持行级锁定的存储引擎,如InnoDB。 4. 调整应用程序逻辑,确保在并发环境中正确处理加锁和解锁操作。 ...
接着,确定数据库的主要用途,如 Multifunctional Database(通用多功能型)、Transactional Database Only(事务处理)或 Non-Transactional Database Only(非事务处理型)。最后,配置 InnoDB 表空间,确保选择...
4. **存储引擎**:MySQL支持多种存储引擎,如InnoDB(支持事务处理和行级锁定)和MyISAM(读取速度快,不支持事务)。了解不同引擎的优缺点,有助于选择适合应用场景的引擎。 5. **查询优化**:DBT3基准测试中包含...
这些资料对于初学者来说非常有用,能够帮助他们快速上手MySQL和Java的结合使用,理解数据库连接、事务处理、存储过程、触发器等高级特性。 总的来说,学习MySQL数据库不仅涉及数据库理论和SQL语法,还需要掌握如何...
12. **复制与集群**:MySQL的主从复制用于实现高可用性和数据冗余,而MySQL Cluster提供分布式事务处理和故障恢复。 13. **分区与分片**:大表的分区可以提高查询性能,而分片则用于水平扩展数据库能力。 14. **...
在事务处理方面,脑图会讲解ACID(原子性、一致性、隔离性和持久性)属性,以及如何使用BEGIN、COMMIT和ROLLBACK语句进行事务控制。 脑图可能还会涉及存储过程和触发器,这两个是MySQL中用于实现业务逻辑和自动化...
以上是MySQL学习的一些核心内容,通过深入学习和实践,你可以逐步成为MySQL的专家。提供的“MySQL中文参考手册”PDF文件将是你学习路上的重要资源,其中包含了详细的MySQL命令和使用指南,帮助你理解和掌握这些知识...
数据库事务处理是数据库管理系统中的核心概念,用于确保数据的一致性和完整性。在“数据库事务处理基础——设计与实现”这个主题中,我们将深入探讨数据库事务的各个方面,包括其定义、特性、类型以及如何在实际应用...
- TCL(事务控制语言):涉及事务处理,确保数据一致性。 - 视图:创建虚拟表,简化复杂的查询。 - 变量:在MySQL中使用变量进行动态计算和存储中间结果。 - 存储过程和函数:预编译的SQL代码块,可重复使用,提高...
在SQL学习中,MySQL是一个非常重要的关系型数据库管理系统,它被广泛应用于各种规模的企业和项目中,也是初学者入门数据库管理的理想选择。本教程将带你深入理解SQL的基础知识,并通过实际操作MySQL数据库来掌握这些...
ACID(原子性、一致性、隔离性和持久性)是事务处理的四大特性。学会使用COMMIT、ROLLBACK和SAVEPOINT来控制事务是重要的。 6. 触发器与事件调度器: 触发器是数据库自动执行的程序,通常在数据更改时触发。事件...
在这些文件名中,我们可以看到不同章节的学习材料,例如"learningmariadb-ch05-start.sql"到"learningmariadb-ch10-start.sql",这可能代表了MySQL和MariaDB的逐步学习过程。每个文件可能是某个章节的示例数据库或...
MySQL支持ACID属性的事务处理。 #### 性能优化 - **索引**: 为表中的一个或多个列创建索引可以显著加快数据检索速度。 - **查询优化**: 合理编写SQL查询语句,避免全表扫描等低效操作。 - **缓存**: 使用缓存机制...
5. **存储引擎**: MySQL支持多种存储引擎,如InnoDB(支持事务处理和外键)、MyISAM(读写速度快,不支持事务)等。了解不同引擎的特点,根据需求选择合适的引擎。 6. **视图**: 视图是虚拟表,基于一个或多个表的...