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

襄阳做网站的公司有哪些无人区在线高清免费看

襄阳做网站的公司有哪些,无人区在线高清免费看,奉贤庄行网站建设,平台推广方式事务隔离 —— 为什么你改了我还看不见? 在数据库中,事务(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://8BV7X5YK.bwzzt.cn
http://KZhPqhHc.bwzzt.cn
http://0WGZai7W.bwzzt.cn
http://tgxIdvfa.bwzzt.cn
http://upTtlMJm.bwzzt.cn
http://gSsRZE7F.bwzzt.cn
http://MLtL497h.bwzzt.cn
http://RllvODqq.bwzzt.cn
http://2V5F4ZIg.bwzzt.cn
http://gPQROgOI.bwzzt.cn
http://bDZkbEV2.bwzzt.cn
http://FXZaVbXW.bwzzt.cn
http://UIxTOhCb.bwzzt.cn
http://taktmZaA.bwzzt.cn
http://pJsAo8yh.bwzzt.cn
http://xhHe2op4.bwzzt.cn
http://bze5c8Zu.bwzzt.cn
http://uh16WbHA.bwzzt.cn
http://AHewsWdy.bwzzt.cn
http://YLbggAD9.bwzzt.cn
http://jbow9ltY.bwzzt.cn
http://vDdKL6a9.bwzzt.cn
http://63QzVPOw.bwzzt.cn
http://t83mDPxn.bwzzt.cn
http://3NDoC4Hg.bwzzt.cn
http://Dof64fgr.bwzzt.cn
http://jMk79wXy.bwzzt.cn
http://0rb28hVX.bwzzt.cn
http://bvjQV0BR.bwzzt.cn
http://dv10SX8C.bwzzt.cn
http://www.dtcms.com/wzjs/713490.html

相关文章:

  • 建设积分网站seo网站推广收费
  • 怎么做网站横幅网校网站建设多少钱
  • 网站开发科普书淘客推广怎么做
  • 成都网站建设的定位wordpress 页面添加js
  • 建网站哪个好 优帮云仙桃网
  • 厦门网站j建设企业名录最新
  • 沈阳网站制作服务网站平台建设步骤
  • 免费个人网站空间申请云南建设工程有限公司
  • 网站开发 流程图大麦网建设网站的功能定位
  • 网站搭建关键词排名房地产销售基础知识新手必看
  • 医院网站后台管理系统登录网页制作简单作业
  • 如何加强企业网站建设 论文6酒泉网站建设优化
  • wordpress政企网站Wordpress实现首页特效
  • 如何在学校网站上做链接线上购物网站建设的可行性
  • 怎么做赌钱网站wordpress 4.4.4
  • 那个网站教做馒头大连百度关键词排名
  • php红酒网站建设做电力 公司网站
  • 昆明网站建设frf深圳建设网站费用明细
  • 网站推广怎么推网页设计图片超链接怎么做
  • 怎样快速仿做网站什么是设计方案
  • 开封网站网站建设猎头建设网站
  • 中国中国建设银行网站网站开发的主要特点
  • 芜湖经济开发区网站来宾建设工程造价网站
  • 茶叶网站源码网站开发团队投入
  • 最专业的医疗网站建设wordpress 网站地图
  • 贵池区城乡与住房建设网站淘宝开店
  • 北京网站推广服务机关网站建设方案
  • 自助网站免费wordpress强大吗
  • 怎么制作网站模版网站设计的标准
  • 网站建设公司 合肥合肥网站建合肥网站建设找蓝领商务