当前位置: 首页 > news >正文

MySQL的事务特性、事务特性保证和事务隔离级别

        事务是指要么所有的操作都成功执行,要么所有的操作都不执行的一组数据库操作。

一、MySQL提供了四个事务特性,即ACID:

        1. 原子性(Atomicity):一个事务中的所有操作要么全部提交成功,要么全部回滚失败,保证事务的原子性。

        2. 一致性(Consistency):在事务开始之前和事务结束后,数据库状态必须是一致的。这意味着,在事务执行期间,如果出现任何错误,则必须回滚所有对数据库的更改以确保其状态的一致性。

        3. 隔离性(Isolation):每个正在进行的事务必须与其他并发事务隔离,防止数据冲突。MySQL提供了四种隔离级别,最弱的是读未提交,最强的是序列化。

        4. 持久性(Durability):一旦事务被提交,它对数据库的更改就应该是永久性的。也就是说,即使发生系统故障、崩溃或其他异常情况,已提交的事务仍然应该保留它们所做的更改。

二、MySQL的事务保证

        1.原子性:使用undolog日志记录事务操作的所有修改,在回滚时利用undolog日志进行undo操作,撤销前面已经执行的sql语句。

        2.一致性:其他三个特性共同保证了事务的一致性。只有当一个事务全部成功地完成,才能保证数据库状态的一致性。如果出现任何问题导致事务失败,则必须回滚事务并撤销所有更改,以确保数据库状态与开始事务之前的状态一致。

        3.隔离性:使用多版本并发控制 (MVCC) 机制实现事务的隔离性。此机制可以防止事务之间的干扰,并允许并发访问数据库,从而提高了系统的吞吐量。MySQL支持四种隔离级别,可以根据应用程序的需要选择适当的隔离级别。

        4.持久性:使用redolog 日志内存缓存来确保事务的持久性。在写入磁盘之前,MySQL将所有修改记录在redolog日志中,从而保证即使系统崩溃或断电,已提交的事务也不会丢失。同时,在内存缓存中保存数据可以加快数据库的读写速度,从而进一步提高系统的性能。

三、MySQL提供了四种事务隔离级别:

        1. 读未提交(Read Uncommitted):最低级别的事务隔离级别,允许一个事务中的修改可以被另外一个未提交的事务所读取。这种隔离级别最容易造成脏读、不可重复读和幻读。

        2. 读已提交(Read Committed):已提交的数据才能被其他事务读取,避免脏读现象的出现。但由于在同一事务内两次相同的 SELECT 可能得到不同的结果,因此可能产生不可重复读的问题。

        3. 可重复读(Repeatable Read):这种隔离级别保证同一事务内多次读取同样的数据时,它们所读取的内容总是一致的。它常常使用锁机制来实现,会造成一定的性能损失。

        4. 序列化(Serializable):最严格的事务隔离级别。通过强制事务串行执行,来防止脏读、不可重复读、 幻读以及更新丢失等问题的发生。然而,这也带来了巨大的数据库性能开销,应该避免选择这种隔离级别,除非必要。

http://www.lryc.cn/news/66886.html

相关文章:

  • shell脚本----函数
  • ( 位运算 ) 693. 交替位二进制数 ——【Leetcode每日一题】
  • http简述
  • 一顿饭的事儿,搞懂了Linux5种IO模型
  • C#面向对象的概念
  • 探索学习和入门使用GitHub Copilot:提升代码开发的新利器
  • 在字节跳动做了6年软件测试,4月无情被辞,想给划水的兄弟提个醒
  • 常见信号质量问题、危害及其解决方法-信号完整性-过冲、噪声、回勾、边沿缓慢
  • Java 自定义注解及使用
  • ChatGPT的强化学习部分介绍——PPO算法实战LunarLander-v2
  • JavaWeb ( 八 ) 过滤器与监听器
  • Notion Ai中文指令使用技巧
  • Linux一学就会——编写自己的shell
  • 编程练习【有效的括号】
  • Android 音频开发——桌面小部件(七)
  • 常见的C++包管理
  • 基于yolov7开发构建学生课堂行为检测识别系统
  • GPT-4 开始内测32k输入长度的版本了!你收到邀请了吗?
  • 如何用ChatGPT做新品上市推广方案策划?
  • Qt之QGraphicsEffect的简单使用(含源码+注释)
  • 前端优化-css
  • 第三方ipad笔哪个牌子好用?ipad触控笔推荐平价
  • windows10+detectron2完美安装教程
  • 串口与wifi模块
  • 上财黄烨:金融科技人才的吸引与培养
  • 利用MQ事务消息实现分布式事务
  • C++面向对象设计:深入理解多态与抽象类实现技巧
  • 长三角生物医药产业加速跑,飞桨螺旋桨为创新药企、医药技术伙伴装上AI大模型引擎...
  • orin Ubuntu 20.04 配置 Realsense-ROS
  • MyBatis基础知识点总结