`
anysky131
  • 浏览: 176685 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

MySQL事务处理学习记

阅读更多

关于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事务的基础学习以及心得分享

    MySQL事务是数据库操作的核心概念,尤其对于保证数据一致性至关重要。事务是数据库系统执行逻辑操作的基本单位,具有四个关键特性:原子性、一致性、隔离性和持久性。 1. 原子性(Atomicity):原子性确保事务中的...

    MySql数据库学习记录.zip

    - MySQL支持多种存储引擎,如InnoDB(默认,支持事务处理和外键)、MyISAM(非事务处理,快速读取)等。 - 选择合适的存储引擎取决于应用需求,如并发性、事务处理、空间效率等。 8. **性能优化**: - 使用...

    VB对MySQL的读取处理控制等

    在VB(Visual Basic 6)中与...通过分析这些文件,我们可以学习如何在VB6中构建一个简单的数据库应用,包括数据库连接、SQL命令的执行以及数据的处理。如果想要深入理解这个项目,需要打开并研究每个文件的具体内容。

    mySQL学习记录.zip

    12. **InnoDB和MyISAM引擎**: MySQL中的两种主要存储引擎,InnoDB支持事务处理和行级锁定,MyISAM则以读取速度快著称。 如果"mySQL学习记录.zip"包含的"Kwan1117"是某个具体的文件或目录名,可能指向一个笔记文档、...

    MySQL存储过程学习

    在事务处理中,存储过程能够确保一组操作的原子性,即使在发生错误时也能保持数据的一致性。 在实际应用中,存储过程广泛用于业务逻辑复杂的场景,如数据清洗、报表生成、批处理操作等。例如,一个存储过程可能用于...

    mysql源代码,深入学习mysql必须分析其源代码

    源代码分析能够帮助我们理解MySQL内部的工作机制,包括查询处理、存储引擎、事务处理、并发控制、索引构建等核心功能。 MySQL源代码的结构复杂且庞大,包含了各种组件和模块。`ChangeSet`可能是版本控制文件,记录...

    PHP+MySQL高并发加锁事务处理问题解决方法

    2. 在查询中使用`FOR UPDATE`来锁定待检查的行,防止在事务处理过程中被其他事务修改。 3. 确保数据库表使用支持行级锁定的存储引擎,如InnoDB。 4. 调整应用程序逻辑,确保在并发环境中正确处理加锁和解锁操作。 ...

    mysql初级学习建议

    接着,确定数据库的主要用途,如 Multifunctional Database(通用多功能型)、Transactional Database Only(事务处理)或 Non-Transactional Database Only(非事务处理型)。最后,配置 InnoDB 表空间,确保选择...

    mysql学习用数据库dbt3

    4. **存储引擎**:MySQL支持多种存储引擎,如InnoDB(支持事务处理和行级锁定)和MyISAM(读取速度快,不支持事务)。了解不同引擎的优缺点,有助于选择适合应用场景的引擎。 5. **查询优化**:DBT3基准测试中包含...

    Mysql数据库的学习

    这些资料对于初学者来说非常有用,能够帮助他们快速上手MySQL和Java的结合使用,理解数据库连接、事务处理、存储过程、触发器等高级特性。 总的来说,学习MySQL数据库不仅涉及数据库理论和SQL语法,还需要掌握如何...

    MySQL学习的一些记录.zip

    12. **复制与集群**:MySQL的主从复制用于实现高可用性和数据冗余,而MySQL Cluster提供分布式事务处理和故障恢复。 13. **分区与分片**:大表的分区可以提高查询性能,而分片则用于水平扩展数据库能力。 14. **...

    数据库mysql学习脑图

    在事务处理方面,脑图会讲解ACID(原子性、一致性、隔离性和持久性)属性,以及如何使用BEGIN、COMMIT和ROLLBACK语句进行事务控制。 脑图可能还会涉及存储过程和触发器,这两个是MySQL中用于实现业务逻辑和自动化...

    MySQL.rar_MYSQL_mysql学习_学习mysql

    以上是MySQL学习的一些核心内容,通过深入学习和实践,你可以逐步成为MySQL的专家。提供的“MySQL中文参考手册”PDF文件将是你学习路上的重要资源,其中包含了详细的MySQL命令和使用指南,帮助你理解和掌握这些知识...

    数据库事务处理基础——设计与实现

    数据库事务处理是数据库管理系统中的核心概念,用于确保数据的一致性和完整性。在“数据库事务处理基础——设计与实现”这个主题中,我们将深入探讨数据库事务的各个方面,包括其定义、特性、类型以及如何在实际应用...

    MySQL学习笔记 MySQL学习笔记

    - TCL(事务控制语言):涉及事务处理,确保数据一致性。 - 视图:创建虚拟表,简化复杂的查询。 - 变量:在MySQL中使用变量进行动态计算和存储中间结果。 - 存储过程和函数:预编译的SQL代码块,可重复使用,提高...

    sql 学习 mysql 数据库学习

    在SQL学习中,MySQL是一个非常重要的关系型数据库管理系统,它被广泛应用于各种规模的企业和项目中,也是初学者入门数据库管理的理想选择。本教程将带你深入理解SQL的基础知识,并通过实际操作MySQL数据库来掌握这些...

    MySQL学习笔记,记录MySQL学习中遇到的问题.zip

    ACID(原子性、一致性、隔离性和持久性)是事务处理的四大特性。学会使用COMMIT、ROLLBACK和SAVEPOINT来控制事务是重要的。 6. 触发器与事件调度器: 触发器是数据库自动执行的程序,通常在数据更改时触发。事件...

    MYSQL与MARIADB学习指南-源SQL

    在这些文件名中,我们可以看到不同章节的学习材料,例如"learningmariadb-ch05-start.sql"到"learningmariadb-ch10-start.sql",这可能代表了MySQL和MariaDB的逐步学习过程。每个文件可能是某个章节的示例数据库或...

    MySQL数据库资源学习基础

    MySQL支持ACID属性的事务处理。 #### 性能优化 - **索引**: 为表中的一个或多个列创建索引可以显著加快数据检索速度。 - **查询优化**: 合理编写SQL查询语句,避免全表扫描等低效操作。 - **缓存**: 使用缓存机制...

    记录学习MySQL数据库的学习笔记和各种资料.zip

    5. **存储引擎**: MySQL支持多种存储引擎,如InnoDB(支持事务处理和外键)、MyISAM(读写速度快,不支持事务)等。了解不同引擎的特点,根据需求选择合适的引擎。 6. **视图**: 视图是虚拟表,基于一个或多个表的...

Global site tag (gtag.js) - Google Analytics