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

免费学软件的自学网站做网站的一个月能赚多少钱

免费学软件的自学网站,做网站的一个月能赚多少钱,如何免费发布个人网站,amz123事务隔离 —— 为什么你改了我还看不见? 在数据库中,事务(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://www.dtcms.com/a/417032.html

相关文章:

  • 宁夏建设厅网站首页软件开发的公司
  • 建立了网站后如何发贴我们网站百度快照显示违规内容
  • 哪里有做网站定制衣服的厂家
  • 暴利产品竞价单页网站弄个直播平台大概要多少钱
  • 网站建设策划框架如何在360网站网页上做笔记
  • 公司网站做优化网站建设费用的会计核算
  • 网站怎么添加百度地图做网站用asp还是php
  • 广州网站建设年底促销网站如何做seo的
  • 微网站绑定域名书店建设网站
  • 廊坊网站制作潍坊公司电话使用织梦系统建设网站教程
  • 软件工程师是做什么的镇海seo关键词优化费用
  • 做intor的网站电信外包有必要去吗
  • 后台与网站北京网站建设公司艺唯思
  • 大连网站专业制作镇江企业网站制作
  • 深圳哪里有做网站的公司做定制的网站
  • 楼盘销售管理网站开发资源插画设计
  • 成都做营销型网站推广网站流量分布
  • 个性化网站建设公司网站建设简洁
  • 网站制作要用哪些软件有哪些网上书店网站前端搜索条怎么做
  • 广东省省建设厅网站零库存品牌童装杭州网站建设
  • 南通网站建设教程上海市企业
  • 关键词做网站标题是什么意思凡科做网站给后台的吗
  • QEvent和它的涉及类继承体系和设计思想
  • 上海的加盟网站建设wordpress表单生成
  • 网站开发 业务流程图国外做家装的网站有哪些
  • 上海知名的网站建设公司网站开发商怎么关闭图片显示
  • 晋中市科技馆网站建设平阳县住房和城乡规划建设局网站
  • 营销型网站方案书阿里云 win wordpress 伪静态
  • 做网站要先买域名吗淘宝网首页电脑登陆入口
  • 找人做网站昆明建设门户网站发展前景2018