MySQL事务的四大特性以及并发事务问题解读

 更新时间:2023年09月22日 16:14:54   作者:LMGD  
这篇文章主要介绍了MySQL事务的四大特性以及并发事务问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

MySQL事务的四大特性以及并发事务

事务的四大特性ACID

原子性(Atomicity):

  • 事务是不可分割的最小单元,要么全部成功,要么全部失败。
  • (eg:转账案例,转账过程中任何一步操作失败了,那么整个事务就失败了)

一致性(Consistency):

  • 事务完成时,必须使所有的数据都保持一致状态。
  • (不管是事务执行成功提交,还是事务执行失败回滚了,张三李四账户余额加起是一个恒定值。转账前总和6000,转账后不可能出现两个人的账户总和8000)

隔离性(Isolation):

  • 数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行。
  • (隔离性是指:有并发个事务,事务A、事务B同时操作数据库,A事务在操作的时候不会影响B事务的执行;同理B事务在操作的时候,也不会影响A事务的执行。它们两个事务在独立的环境下运行的,互不影响。)

持久性(Persistence):

  • 事务一旦提交或回滚,它对数据库中的数据改变就是永久的。
  • (不管是事务执行成功提交了,还是操作异常回滚了,它对数据库的改变时永久的,因为数据库的数据最终是存储在磁盘的,那么存储在磁盘的数据它会被永久的保留下来)

事务-并发事务问题

脏读:一个事务读到另一个事务还没有提交的数据。

不可重复读:一个事务先后读取同一条记录,但两次读取的数据不同,称之为不可重复读。

幻读: 一个事务按照条件查询事务时,没有对应的数据行,但是在插入数据时,又发现这行数据已存在,好像出现了幻影。

并发事务出现的问题-图文描述:

脏读:

  • B事务读取A事务修改后(update后)未提交的数据;
  • 事务A对id=1 的数据进行了修改,且修改后还未提交事务,此时事务B查询id=1的数据,查到的数据是事务B修改后未提交的数据。这种情况称之为脏读。

不可以重复读:

  • A事务一共有4个操作,第一步时查询数据库id=1的数据,第二步执行其他操作时,此时B事务对id=1的数据进行修改(注:并发事务),修改后提交事务。
  • A事务执行第三步查询id=1的数据时,和第一步查询id=1的返回结果不一样(因为B事务对id=1的数据进行了修改),这种情况称之为不可以重复读。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 如何优雅、安全的关闭MySQL进程

    如何优雅、安全的关闭MySQL进程

    这篇文章主要介绍了如何优雅、安全的关闭MySQL进程,帮助大家更好的理解和学习MySQL,感兴趣的朋友可以了解下
    2020-08-08
  • Mac os 解决无法使用localhost连接mysql问题

    Mac os 解决无法使用localhost连接mysql问题

    今天在mac上搭建好了php的环境,把先前在window、linux下运行良好的程序放在mac上,居然出现访问不了数据库,数据库连接的host用的是localhost,可以确认数据库配置是正确的,下面特为大家分享下
    2014-05-05
  • mysql实现merge into问题

    mysql实现merge into问题

    文章介绍了在数据库操作中,如何使用`REPLACE INTO`和`INSERT INTO ON DUPLICATE KEY UPDATE`语句进行数据更新和插入操作,如果不想创建唯一性索引,可以通过存储过程实现,文章通过实验和验证,展示了这两种方法的实际效果
    2024-12-12
  • MySQL缓存优化方案总结

    MySQL缓存优化方案总结

    最近迭代的产品版本从2.X来到了3.X,属于一个非常大的产品升级,比上个版本多了很多功能,那么上线之前肯定要在一个干净的环境里进行测试回归以及性能测试,本文总结一下数据库层面的一些缓存机制对查询速度整体的优化,需要的朋友可以参考下
    2023-08-08
  • MySQL窗口函数实现榜单排名

    MySQL窗口函数实现榜单排名

    相信大家在日常的开发中经常会碰到榜单类的活动需求,本文主要介绍了MySQL窗口函数实现榜单排名,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • MySQL动态列转行的实现示例

    MySQL动态列转行的实现示例

    本文介绍了如何在MySQL中实现动态列转行的功能,通过使用格式化日期、计数函数、分组、存储过程、分组合并函数和SQL拼接等技巧,可以将动态列转换为行,从而更好地进行数据分析和展示,感兴趣的可以了解一下
    2024-11-11
  • mysql 5.7.16 winx64安装配置方法图文教程

    mysql 5.7.16 winx64安装配置方法图文教程

    这篇文章主要为大家分享了mysql 5.7.16winx64安装配置方法图文教程,感兴趣的朋友可以参考一下
    2016-11-11
  • 浅谈mysql的not exists走不走索引

    浅谈mysql的not exists走不走索引

    在MySQL中,​NOT EXISTS子句是否使用索引取决于子查询中关联字段是否建立了合适的索引,下面就来介绍一下mysql的not exists走不走索引,感兴趣的可以了解一下
    2025-07-07
  • mysql命令行中执行sql的几种方式总结

    mysql命令行中执行sql的几种方式总结

    下面小编就为大家带来一篇mysql命令行中执行sql的几种方式总结。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-11-11
  • mysql删除表数据如何恢复

    mysql删除表数据如何恢复

    这篇文章主要介绍了mysql删除表数据如何恢复,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11

最新评论