1.8.5.3. 事务和原子操作

MySQL服务器(3.23至该系列的最高版本,所有4.0版本,以及更高版本)支持采用InnoDB和BDB事务存储引擎的事务。InnoDB提供了全面的ACID兼容性。请参见第15章:存储引擎和表类型。

MySQL服务器中的其他非事务性存储引擎(如MyISAM)遵从不同的数据完整性范例,称之为“原子操作”。按照事务术语,MyISAM表总能高效地工作在AUTOCOMMIT=1模式下。原子操作通常能提供可比较的完整性以及更好的性能。

由于MySQL服务器支持两种范例,因而你能决定是否利用原子操作的速度更好地服务于你的应用程序,或使用事务特性。该选择可按表进行。

正如所阐述的那样,事务性和非事务性表类型之间的权衡主要取决于性能。事务性表对内存和磁盘空间的要求更高,CPU开销也更大。另一方面,多种事务性表类型,如InnoDB,也能提供很多显著特性。MySQL服务器的模块化设计允许同时使用不同的存储引擎,以满足不同的要求,并在所有情形下,提供最佳性能。

但是,即便使用非事务性MyISAM表,你将如何使用MySQL服务器的特性来保持严格的完整性呢?这些特性与事务性表类型相比又如何呢?

1.

如果应用程序采用了特定的编写方式,依赖于在关键情况下能够调用ROLLBACK而不是COMMIT,那么事务性类型更方便。使用事务,还能确保未完成的更新或崩溃的活动不被提交到数据库,能为服务器提供自动回滚的机会,并保存你的数据库。

如果使用非事务性表,MySQL服务器几乎在所有情况下均允许你解决潜在的问题,方式是在更新前进行简单检查,并运行检查数据库一致性的简单脚本,如果出现不一致性,该脚本能自动修复它或给出告警。注意,仅使用MySQL日志或增加额外日志,通常能完美地更正表,同时不会造成数据完整性损失。

2.

在很多情况下,能够对关键的事务更新进行重写,使之成为“原子”类型。一般而言,所有由事务解决的完整性问题均能用LOCK

TABLES或原子更新解决,从而确保了服务器不会自动中断,后者是事务性数据库系统的常见问题。

3.

为了安全使用MySQL服务器,无论是否使用事务性表,仅需启用备份和二进制日志功能。这样,你就能解决使用其他事务性数据库系统时遇到的任何问题。无论使用的数据库系统是什么,启用备份总是个好主意。

在完整性具有最高重要性的情况下,即使是对非事务性表,MySQL也能提供事务级别的可靠性和安全性。如果使用LOCK

TABLES锁定了表,所有更新均将被暂时中止直至完整性检查完成。如果你获得了对某一表的READ

LOCAL锁定(与写锁定相对),该表允许在表尾执行并行插入,当其他客户端执行插入操作时,允许执行读操作。新插入的记录不会被有读锁定属性的客户端看到,直至解除了该锁定为止。使用INSERT

DELAYED,能够将插入项置于本地队列中,直至锁定解除,不会让客户端等待插入完成

事务范型有自己的优点和不足之处。很多用户和应用程序开发人员喜欢这类简单性,在出现问题时或必要时,通过代码解决问题。但是,即使你是原子操作范型的新手,或更熟悉事务,也请考虑非事务性表的速度益处,与经过优化调整的最快的事务性表相比,它的速度快3~5倍。

mysql事务和非事物_mysql事务型与非事务型表1.8.5.3. 事务和原子操作相关推荐

  1. mysql 聚簇索引和非聚簇索引_MySql聚簇索引与非聚簇索引的区别

    通常情况下,建立索引是加快查询速度的有效手段.但索引不是万能的,靠索 引并不能实现对所有数据的快速存取.事实上,如果索引策略和数据检索需求严重不符的话,建立索引反而会降低查询性能.因此在实际使用当中, ...

  2. mysql 跳过一个事物_MYSQL GTID跳过指定事务

    主库删除了ttt表,从库上没有ttt表,出现了报错. [root@mysqlstu2:demo]10:49:52>show slave status\G ******************** ...

  3. mysql 跳过一个事物_MySQL基于GTID的数据恢复

    大家好,我是anyux.本文介绍MySQL基于GTID的数据恢复. 文末总结基于GTID的数据恢复,并有导图 创建一个数据库 gtid,在gtid库下创建表tmp,插入5行数据 create data ...

  4. MySQL简单拷贝并重命名_MYSQL 复制,重命名表等

    mysql 命令重命名表RENAME TABLE 句法 RENAME TABLE tbl_name TO new_tbl_name[, tbl_name2 TO new_tbl_name2,...] ...

  5. mysql查阅建立的库_MySQL - 建库、建表、查询

    本章通过演示如何使用mysql客户程序创造和使用一个简单的数据库,提供一个MySQL的入门教程.mysql(有时称为"终端监视器"或只是"监视")是一个交互式程 ...

  6. mysql 覆盖索引 简书_mysql覆盖索引与回表

    select id,name where name='shenjian' select id,name,sex* where name='shenjian'* 多查询了一个属性,为何检索过程完全不同? ...

  7. mysql count join速度慢_MySql两张百万级表关联的count效率求解? 400 报错-问答-阿里云开发者社区-阿里云...

    select count(1) from B b inner join A a on a.id = b.personid where b.code like '32%' 这样试试呢######sele ...

  8. mysql建库sql语句_mysql建库和建表的sql语句

    需求描述: 在用户提交酒店订单时,需要记录订单信息和订单日志:订单信息包括用户名.订单号.入住时间和离店时间: 订单日志包括谁在什么时候操作了该订单,下订单时需要记录的订单日志为系统在下订单的时间点创 ...

  9. mysql 返回多行数据_mysql – 如何连接多个表,包括查找表和返回行中的数据

    我正在尝试显示一些简单的计算机游戏结果,并且可以轻松地在我的代码中逐行迭代结果.我想要它,以便每个游戏的所有相关数据都在每个记录中,所以我可以在一行输出所有数据,例如: > A队(得分45)对阵 ...

最新文章

  1. 周末--------粉红色的回忆
  2. Mysql学习(一)之简单介绍
  3. 存储函数和存储过程的区别
  4. 2021-04-05
  5. 百度指数可视化_可视化指数
  6. html5 开发工具_前端HTML5开发工具有哪些呢?
  7. 关于c3p0连接池连接mysql数据库需要注意的几点
  8. Linux安装微信、QQ
  9. 32位程序使用超过4G的内存
  10. LVDS 显示屏的两种接口标准:VESA 和 JEIDA;单/双路 LVDS 信号
  11. Texstudio 与 SumatraPDF双向搜索设置
  12. 苹果cmsV10添加全屏幻灯图、全屏轮播图教程
  13. 《传送门》游戏中传送机制简析
  14. Fata erro:Kinetis (connect):Timeout while halting CPU.CPU dones not stop. Sesion aborted!
  15. Linux: fPIC与 pie 区别
  16. MATLAB计算黎曼积分曲线围成的面积
  17. ireport 5.6.0 + Jasper 6.8.0 报表生成
  18. 【蓝桥杯】Java_B组2017年省赛真题
  19. STM32和ST-LINK V2的连接与调试
  20. 【装机至尊】《中关村GHOSTXPSP3纯净装机自选DVD特别版V201011A》(海量驱动)

热门文章

  1. 计算机工作对身体有害吗,在电脑前长时间工作会对身体有害处吗?
  2. android recycleview长按多选_UI设计中Android和IOS设计差异总结
  3. 获取天气html,使用htmlparser获取sohu的天气预报
  4. 树的结构 数据结构_段树| 数据结构
  5. java 方法 示例_Java语言环境getISOLanguages()方法与示例
  6. 看完这篇文章,我再也不怕面试官问「垃圾回收」了...
  7. c# 获取电脑硬件信息通用查询类[测试通过]
  8. linux——回射服务器多并发(多进程)
  9. Python如何忽略warning的输出
  10. Java-IO-对接流