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

做本地分类信息网站赚钱吗网络系统管理技能大赛教程

做本地分类信息网站赚钱吗,网络系统管理技能大赛教程,找人做网站需要注意问题,ui设计软件哪个好事务隔离 —— 为什么你改了我还看不见? 在数据库中,事务(Transaction) 用于保证一组数据库操作要么全部成功,要么全部失败,这是一种原子性的操作机制。在 MySQL 中,事务的支持由存储引擎层实现…

事务隔离 —— 为什么你改了我还看不见?

在数据库中,事务(Transaction) 用于保证一组数据库操作要么全部成功,要么全部失败,这是一种原子性的操作机制。在 MySQL 中,事务的支持由存储引擎层实现。但并非所有引擎都支持事务,比如 MySQL 原生的 MyISAM 引擎就不支持事务,而 InnoDB 引擎 则是主流的支持事务的引擎。


一、事务的四大特性(ACID)

特性含义
原子性(Atomicity)事务中包含的所有操作要么全部成功,要么全部失败
一致性(Consistency)事务执行前后,数据库都处于一致状态
隔离性(Isolation)并发执行的事务之间彼此隔离,互不影响
持久性(Durability)事务一旦提交,对数据库的修改就是永久性的,即使系统故障也不会丢失

二、隔离性与隔离级别

当多个事务并发执行时,若没有隔离,就可能导致以下问题:

  • 脏读(Dirty Read):读取到未提交事务的数据
  • 不可重复读(Non-repeatable Read):同一事务中多次读取同一数据,值却不同
  • 幻读(Phantom Read):同一事务中两次查询返回的记录数不同

为解决这些问题,SQL 标准定义了四种隔离级别:

1. 四大隔离级别说明

隔离级别描述会发生的问题
Read Uncommitted(读未提交)可以读取未提交事务修改的数据脏读、不可重复读、幻读
Read Committed(读已提交)只能读取已提交事务修改的数据不可重复读、幻读
Repeatable Read(可重复读)同一事务内多次读取结果一致(MySQL 默认)幻读(依赖间隙锁解决)
Serializable(可串行化)强制事务串行执行,防止并发无脏读/不可重复读/幻读,但效率低

注意:隔离级别越高,性能越差。需要根据业务需求做权衡。

2. 示例说明(图示说明略,可自己绘图添加)

假设有两个事务 A 和 B,对某行数据进行读写操作:

  • 读未提交 下,事务 A 会看到事务 B 的未提交修改
  • 读已提交 下,A 只能看到 B 已提交的修改
  • 可重复读 下,A 在整个事务中看到的始终是开始时的数据快照
  • 串行化 下,B 的写操作会被阻塞,直到 A 完成

3. MySQL 中隔离级别的实现方式

  • Read Uncommitted:直接读取最新数据,无视事务
  • Read Committed:每次 SQL 执行前创建一个视图(Read View)
  • Repeatable Read:在事务开始时创建视图,期间一直使用同一个视图
  • Serializable:加锁控制并发,防止冲突

在 MySQL 中,默认隔离级别为 Repeatable Read,但 Oracle 默认是 Read Committed

查询当前隔离级别

SHOW VARIABLES LIKE 'transaction_isolation';

三、事务隔离的实现机制(MVCC)

以“可重复读”为例,MySQL 使用 多版本并发控制(MVCC) 来实现事务隔离。

1. 回滚日志机制

  • 每条记录在更新时都会生成一条回滚日志(undo log)
  • 当前值可以通过逐步回滚恢复到历史版本
  • 不同事务通过自己的视图(Read View)看到的版本可能不同

例如,某值从 1 → 2 → 3 → 4,回滚日志如下:

当前值回滚日志
43、2、1

视图 A 启动于值为 1 时,则通过回滚可看到 1;视图 B 则可能看到 2。

2. MVCC 的优点

  • 允许读取操作不加锁,提升并发性能
  • 实现隔离级别无需加重锁负担

3. 回滚日志的回收问题

  • 回滚日志会在无事务再引用时被清除
  • 长事务 会阻止日志清理,导致存储膨胀

实例:某系统数据仅 20GB,但 undo 日志达 200GB,最终只能重建数据库解决。


四、事务的启动方式及建议

1. 显式启动事务

BEGIN;
-- 或
START TRANSACTION;
-- 提交或回滚
COMMIT;
ROLLBACK;

2. 隐式启动方式:autocommit=0

SET autocommit = 0;
  • 此模式下,即使执行一个简单的 SELECT,也会自动开启事务
  • 若未手动 COMMITROLLBACK,事务将一直占用资源,形成 隐性长事务

建议

  • 使用 SET autocommit=1(默认),通过显式语句控制事务
  • 使用 COMMIT WORK AND CHAIN 可在提交后立即开启下一个事务
-- 查看运行超过60秒的事务
SELECT * 
FROM information_schema.innodb_trx 
WHERE TIME_TO_SEC(TIMEDIFF(NOW(), trx_started)) > 60;

五、总结

  • 事务隔离是数据库并发控制的核心机制
  • 在 MySQL 中,推荐使用默认的 Repeatable Read + MVCC 实现事务隔离
  • 尽量避免隐式长事务,主动控制事务生命周期
  • 根据实际业务权衡性能与隔离性的需求

文章转载自:

http://3P3Am408.Lpzyq.cn
http://mo0FMl8Q.Lpzyq.cn
http://9pmr0ElL.Lpzyq.cn
http://jxbsiBtR.Lpzyq.cn
http://bCfToIXi.Lpzyq.cn
http://uRtbRk47.Lpzyq.cn
http://Q4t6nutb.Lpzyq.cn
http://WSD6xRX0.Lpzyq.cn
http://rc7IEUJ9.Lpzyq.cn
http://F80rtAP8.Lpzyq.cn
http://UZLDiGXC.Lpzyq.cn
http://G8OsT1gr.Lpzyq.cn
http://jvDgyX08.Lpzyq.cn
http://7q8XLB6c.Lpzyq.cn
http://aP4e6YSt.Lpzyq.cn
http://RFPzGP7i.Lpzyq.cn
http://SePX0Nji.Lpzyq.cn
http://aZRY6q7L.Lpzyq.cn
http://vsLykrkE.Lpzyq.cn
http://ck3IAFcl.Lpzyq.cn
http://DZKLQUct.Lpzyq.cn
http://sQ3KED0p.Lpzyq.cn
http://4Byj0dHH.Lpzyq.cn
http://1yvSVlU9.Lpzyq.cn
http://slUNSnZP.Lpzyq.cn
http://N1pyWM5S.Lpzyq.cn
http://EnEl2IIN.Lpzyq.cn
http://B4dMPSUf.Lpzyq.cn
http://sz0G92JE.Lpzyq.cn
http://idUm817w.Lpzyq.cn
http://www.dtcms.com/wzjs/674609.html

相关文章:

  • 营销型网站建设怎么样鹿泉专业网站建设
  • 哪个网站专业做安防石家庄新闻
  • 网站诸多合肥教育平台网站建设
  • 软文发布网站网站被降权会发生什么
  • 网站开发费用如何入账手机网站无响应
  • 网站推广手段十大互联网装修平台排名
  • 网站定制公司地址企业网站模板编辑软件
  • 做网站的设计理念wordpress 安装权限管理
  • 北京市住房和城乡建设部网站首页作文网址
  • 东莞网站建设基础型用c 做网站设计系统的项目作业
  • 制作人在那个网站能看做网站的广告
  • 过年做哪个网站能致富WordPress搜索引擎链接提交
  • 丹麦做网站公司有哪些wordpress 编程语言
  • 成都网站推广如何苏州市相城区住房和城乡建设局网站
  • 建筑品牌网站网站内链少改怎么做
  • 上线了建站价格江都建设局网站李局
  • 嘉兴网站建设公司网页页面设计工具
  • 怎么做seo网站推广百度热搜电视剧
  • 如何判断网站seo做的好坏河南省建设厅网站人事网
  • 网站建设需要用到那些语言wordpress文章保存图片
  • 男女做暧暧观看免费网站南昌百度关键词搜索
  • 休闲农庄网站七合一小程序saas平台
  • 如何建立一个小程序的网站培训的网站建设
  • 违法网站开发者怀化市优化办
  • 有空间站的国家网站设计两边为什么要留白
  • 建材网站建设公司山东专业的网站建设
  • 网站建设内容策略有哪些湖南微信网站营销
  • 中小型网站建设服务镇海建设银行网站首页
  • 深圳制作网站培训河南城市建设招标类网站
  • 想做个网站怎么做长沙关键词优化推荐