我的编程空间,编程开发者的网络收藏夹
学习永远不晚

MYSQL事务以及隔离级的概念

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

MYSQL事务以及隔离级的概念

这篇文章主要介绍“MYSQL事务以及隔离级的概念”,在日常操作中,相信很多人在MYSQL事务以及隔离级的概念问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”MYSQL事务以及隔离级的概念”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

事务的概念
  事务是一组原子性的SQL查询语句,也可以被看做一个工作单元。如果数据库引擎能够成功地对数据库应用所有的查询语 句,它就会执行所有查询,如果任何一条查询语句因为崩溃或其他原因而无法执行,那么所有的语句就都不会执行。也就是说,事务内的语句要么全部执行,要么一 句也不执行。
  例:将b表中符合条件的记录搬移到a表中(相似语句已在命令提示行中测试)

双击代码全选
1 2 3 4 5start transaction;//用start transaction语句开始一个事务 insert into a select from b where ...;//将b表中符合条件的行记录插入a表 delete from b where ...;//将b表中符合条件的行记录删除 commit; /rollback; //commit语句提交整个事务,永久地修改数据,rollback语句回滚整个事务,取消已做的修改 //如果插入操作失败,那么删除操作将不执行

  ACID测试

  ACID:原子性(atomicity)、一致性(consistency)、隔离性(isolation)、持久性(durability)。一个有效的事务处理系统必须满足相关标准。
  a.原子性:一个事务必须被视为一个单独的内部“不可分”的工作单元,以确保整个事务要么全部执行,要么全部回滚。当一个事务具有原子性时,该事务绝对不会被部分执行,要么完全执行,要么根本不执行。
  b.一致性:数据库总是从一种一致性状态转换到另一种一致性状态。在上述例子中,一致性确保了,即使插入或者删除操作失败了,数据库也不会多出或者丢失记录。因为最终事务根本没有被提交,任何事务处理过程中所做的数据改变,也不会影响到数据库的内容。
  c.隔离性:某个事务的结果只有在完成之后才对其他事务可见。在上述例子中,当数据库执行完insert语句,还未执行delete语句时,如果此时另一个客户端对数据库的访问也同时运行,它将仍视符合条件的记录在b表中。
  d.持久性:一旦一个事务提交,事务所做的数据改变将是永久的。
   这种事务处理中的额外安全措施,导致数据库服务器要完成更多的额外工作。通常,一个支持ACID特性的数据库,相对于不支持这种特性的数据库,需要更强 的CPU处理能力,更大的内存和更多的磁盘空间。这正是选用MYSQL存储引擎架构的有利之处。用户可以根据应用是否需要事务处理,选择相应的存储引擎。 如果对于某些类型的数据查询,用户不需要真正的事务处理,他可以选择一个非事务处理型的存储引擎来实现查询,以获得更高的处理性能。(我们的数据库选择的 存储引擎是innoDB,支持事务处理,而mysql默认的存储引擎是MyISAM引擎,不支持事务)
  隔离级
  SQL标准定义了4类隔离级,包括了一些具体规则,用来限定事务内外的哪些改变时可见的,哪些是不可见的。低级别的隔离级一般支持更高的并发处理,并拥有更低的系统开销。
  READ UNCOMMITTED(读取未提交内容)
   在READ UNCOMMITTED隔离级,所有事务都可以“看到”未提交事务的执行结果。在这种级别上,可能会产生很多问题。本隔离级很少用于实际应用,因为它的性 能也不比其他级别好多少,而别的级别还有其他更多的优点。读取未提交数据,也被称之为“脏读(Dirty Read)”
  READ COMMITTED(读取提交内容)
   大多数数据库系统的默认隔离级是READ COMMITTED(但这不是MYSQL默认的)。它满足了隔离的早先简单定义:一个事务在开始时,只能“看见”已经提交事务所做的改变,一个事务从开始 到提交前,所做的任何数据改变都是不可见的,除非已经提交。这种隔离级别也支持所谓的“不可重复读(Nonrepeatable Read)”。这意味着用户运行同一语句两次,看到的结果是不同的。
  REPEATABLE READ(可重读)
   REPEATABLE READ 隔离级解决了READ UNCOMMITTED隔离级导致的问题。它确保同一事务的多个实例在并发读取数据时,会“看到相同的”数据行。不过理论上,这会导致另一个棘手问题:幻 读(Phantom Read)。简单来说,幻读指当用户读取某一范围的数据行时,另一个事务又在该范围内插入了新行,当用户再读取该范围的数据行时,另一个事务又在该范围内 插入了新行,当用户再读取该范围的数据行时,会发现有新的“幻影”行。InnoDB和Falcon存储引擎通过多版本并发控制机制解决了幻读问题。 REPEATABLE READ 是MYSQL的默认事务隔离级。InnoDB和Falcon存储引擎都遵循这种设置。
  SERIALIZABLE(可串行化)
  SERIALIZABLE是最高级别的隔离级,它通过强制事务排斥,使之不可能相互冲突,从而解决幻读问题。简言之,SERIALIZABLE是在每个读的数据行上加锁。在这个级别,可能导致大量的超时现象和锁竞争现象。很少看到有用户选择这种隔离级。
  注:不可重复读与幻读:不可重复读的重点是修改(同样的查询条件,你读取过的数据,再次读取出来发现值不一样了);幻读的重点在于新增或者删除(同样的查询条件,第1次和第2次读出来的记录数不一样)
  查看InnoDB系统级别的事务隔离级别:

双击代码全选
1mysql> SELECT @@global.tx_isolation;

  查看InnoDB会话级别的事务隔离级别:

双击代码全选
1mysql> SELECT @@tx_isolation;

  MySQL中的事务

  AUTOCOMMIT(自动提交)
  MySQL默认操作模式是AUTOCOMMIT模式。这意味着除非显示地开始一个事务,否则它将把每个查询视为一个单独事务自动执行。在当前连接中,可以通过变量设置,启用和禁用AUTOCOMMIT模式。

双击代码全选
1 2mysql> SHOW VARIABLES LIKE 'AUTOCOMMIT'; //高版本的mysql支持  mysql> select @@autocommit; //mysql5.0支持

  如果设置AUTOCOMMIT=0,用户将一直处于某个事务中,直到用户执行一条COMMIT或ROLLBACK语句,之后,MYSQL将立即开始一个新事务。

  在事务中混合使用存储引擎
  在一个事务中,如果混合使用事务性表和非事务性表,假如事务处理一切顺利,那么结果也会正常。但是,如果事务须回滚,那么在非事务性表上做的修改将无法取消。这将导致数据库处于数据不一致的状态,在这种状态下,很难对数据进行恢复,并且事务会变得悬而未决。
  隐式和显式锁定
   InnoDB使用二相锁定协议(Two-Phase Locking Protocol两段锁协议)。一个事务在执行过程中的任何时候,都可以获得锁,但只有在执行COMMIT或ROLLBACK语句后,才可以释放这些锁。 它会同时释放掉所有锁。以上描述的锁定机制都是隐式锁定。InnoDB会根据用户的隔离级别,自动处理锁定。不过InnoDB也支持显示锁定。

到此,关于“MYSQL事务以及隔离级的概念”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

MYSQL事务以及隔离级的概念

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

java事务、事务的隔离级别的概念是什么

本篇内容介绍了“java事务、事务的隔离级别的概念是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!什么是事务?  事务,即数据库事务。是
2023-06-02

MySQL的事务隔离级别

目录数据库事务的四大特性⑴ 原子性(Atomicity)⑵ 一致性(Consistency)⑶ 隔离性(Isolation)⑷ 持久性(Durability)SQL的4种隔离级别Read Uncommitted(读取未提交内容)Read Committed(读
MySQL的事务隔离级别
2021-07-07

MySQL 事务的隔离级别

1. 事务的ACID事务的ACID是指事务拥有的4个特性的首字母组合:atomicity(原子性), consistency(一致性), isolation(隔离性)和durability(持久性)。①atomicity(原子性):表示事务是一个不可分割的工作
MySQL 事务的隔离级别
2019-01-27

mysql数据库事务及隔离级别

事务的四大特性: 原子性: 事务是最小的执行单位,不允许分割。事务的原子性确保动作要么全部完成,要么完全不起作用; 一致性: 执行事务前后,数据保持一致,多个事务对同一个数据读取的结果是相同的; 隔离性: 并发访问数据库时,一个用户的事务不被其他事务所干扰,各
mysql数据库事务及隔离级别
2021-09-18

MySQL事务、隔离级别及MVCC是什么

这篇文章主要介绍了MySQL事务、隔离级别及MVCC是什么,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获。下面让小编带着大家一起了解一下。mysql教程栏目介绍MySQL相关的事务、隔离级别及MVCC。MySQL
2022-11-30

MySQL中的事务隔离级别及其影响

MySQL支持四种事务隔离级别,它们分别是:读未提交(Read Uncommitted)、读已提交(Read Committed)、可重复读(Repeatable Read)和串行化(Serializable)。这些隔离级别对数据库的并发性
MySQL中的事务隔离级别及其影响
2024-10-21

MySQL的四种事务隔离级别

环境:Windows 10+cmd+MySQL5.6.36+InnoDB 一、事务的基本要素(ACID) 1.原子性(Atomicity): 事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节。事务执行过程中出错,会回滚到事务开始前的状态,所
MySQL的四种事务隔离级别
2016-09-03

MySQL事务的隔离级别详情

目录一、隔离级别的概念二、测试TRANSACTION_READ_UNCOMMITTED隔离级别三、测试TRANSACTION_READ_COMMITTED隔离级别四、测试TRANSACTION_REPEATABLE_READ隔离级别五、测试
2022-07-14

数据库事务的四大特性以及事务的隔离级别

四大特性如果一个数据库声称支持事务的操作,那么该数据库必须要具备以下四个特性:原子性(Atomicity)  原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,这和前面两篇博客介绍事务的功能是一样的概念,因此事务的操作如果成功就必须要完全应用到数据库
数据库事务的四大特性以及事务的隔离级别
2022-01-10

MySQL锁与事务隔离级别

1、概述(1)锁的定义锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中,除了传统的计算资源(如CPU、RAM、IO等)的争用以外,数据也是一种供需要用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题,锁冲突也是影响
MySQL锁与事务隔离级别
2021-12-05

编程热搜

目录