曲苑杂坛--DML操作中如何处理那些未提交的数据
对数据库稍有了解的人,数据库使用排他锁X锁来避免两个事务同时修改同一条数据,同时使用较低级别如行上加锁来提高并发度。
以下了两种场景很容易理解:
1>事务1执行 UPDATE TB1 SET C2=1 WHERE C1=1(此处假设C1为主键,使用行锁),事务1未提交,而后事务2执行UPDATE TB1 SET C2=2 WHERE C1=1,事务2必须等到事务1提交或回滚后,才能获得对该行数据的X锁;
2>事务1执行 UPDATE TB1 SET C2=1 WHERE C1=1(此处假设C1为主键,使用行锁),事务1未提交,而后事务2执行UPDATE TB1 SET C2=2 WHERE C1=2,由于事务1和2修改的数据行不同,因此事务1和事务2不会阻塞;
但对于以下两种场景就有些难理解:
1>事务1执行 UPDATE TB1 SET C1=11 WHERE C1=1(此处假设C1为主键,使用行锁),事务1未提交,而后事务2执行UPDATE TB1 SET C2=2 WHERE C1=11,数据行在事务1更新前不满足事务2的更新条件,但数据行在事务1更新后又满足事务2的更新条件,事务2会被事务1阻塞么?
测试结果:会被阻塞
测试代码:
DROP TABLE dbo.TB1 GO CREATE TABLE TB1 (C1 INT,C2 INT ) GO CREATE UNIQUE CLUSTERED INDEX IDX_C1 ON dbo.TB1 (C1 ) GO INSERT INTO dbo.TB1( C1, C2 ) SELECT 1,1 UNION SELECT 2,2 UNION SELECT 3,3 UNION SELECT 4,4 GO事务1开始执行,修改数据行但未提交; BEGIN TRAN UPDATE dbo.TB1 SET C1=11 WHERE C1=1在新会话中事务2执行 UPDATE TB1 SET C2=2 WHERE C1=11
View Code
2>事务1执行 UPDATE TB1 SET C1=11 WHERE C1=1(此处假设C1为主键,使用行锁),事务1未提交,而后事务2执行UPDATE TB1 SET C2=2 WHERE C1=1,数据行在事务1更新前满足事务2的更新条件,但数据行在事务1更新后又不满足事务2的更新条件,事务2会被事务1阻塞么?
测试结果:会被阻塞
测试代码:
DROP TABLE dbo.TB1 GO CREATE TABLE TB1 (C1 INT,C2 INT ) GO CREATE UNIQUE CLUSTERED INDEX IDX_C1 ON dbo.TB1 (C1 ) GO INSERT INTO dbo.TB1( C1, C2 ) SELECT 1,1 UNION SELECT 2,2 UNION SELECT 3,3 UNION SELECT 4,4 GO事务1开始执行,修改数据行但未提交; BEGIN TRAN UPDATE dbo.TB1 SET C1=11 WHERE C1=1在新会话中事务2执行 UPDATE TB1 SET C2=2 WHERE C1=1
View Code
3>事务1执行 INSERT INTO dbo.TB1( C1, C2 )SELECT 5,5(此处假设C1为主键,使用行锁),事务1未提交,而后事务2执行UPDATE TB1 SET C2=2 WHERE C1=5,数据行在事务1更新前满足事务2的更新条件,但数据行在事务1更新后又不满足事务2的更新条件,事务2会被事务1阻塞么?
测试结果:会被阻塞
测试代码:
DROP TABLE dbo.TB1 GO CREATE TABLE TB1 (C1 INT,C2 INT ) GO CREATE UNIQUE CLUSTERED INDEX IDX_C1 ON dbo.TB1 (C1 ) GO INSERT INTO dbo.TB1( C1, C2 ) SELECT 1,1 UNION SELECT 2,2 UNION SELECT 3,3 UNION SELECT 4,4 GO事务1开始执行,修改数据行但未提交; BEGIN TRAN INSERT INTO dbo.TB1( C1, C2 ) SELECT 5,5在新会话中事务2执行 UPDATE TB1 SET C2=2 WHERE C1=5
View Code
测试结论:
对于未提交事务A修改的数据,无论该数据在更新修改的值前还是修改后的值满足事务B的修改条件,那么都会对事务B造成阻塞。
--==========================================================
年关近了,日子不好过,随时担心被母亲大人电话轰炸,压力山大,so,小伙伴们就将就着看着没啥营养的博客吧!
--==========================================================
依旧是妹子
转载于:https://www.cnblogs.com/TeyGao/p/4246775.html
曲苑杂坛--DML操作中如何处理那些未提交的数据相关推荐
- 曲苑杂坛--收缩数据库文件
很多人在删除大量数据后收缩数据库,却发现没法收缩到预期效果. 由于使用DBCC SHRINKFILE来收缩数据文件时,是针对数据区来收缩,因此可以先使用DBCC SHOWFILESTATS来查看文件中 ...
- 曲苑杂坛--修改数据库名和文件组名
/* 该脚本示例如何完整的修改一个数据库的名称. 数据库为原名称为DB_BEIJING,需要修改成DB_SHANGHAI nzperfect 2012.12.19 */--判断是否存在同名的数据库,以 ...
- 【c苑杂坛之小游戏系列】 三子棋游戏
[c苑杂坛之边学边玩] 三子棋游戏带你初识C语言 1.游戏说明 2.效果展示 3.游戏代码 1.游戏说明 三子棋游戏相信大家都知道,在这里不去讲述游戏背景,对本代码实现的三子棋游戏进行一定的说明. 博 ...
- 检查点(Checkpoint)过程如何处理未提交的事务
每次我讲解SQL Server之前,我都会先简单谈下当我们执行查询时,在SQL Server内部发生了什么.执行一个SELECT语句非常简单,但是执行DML语句更加复杂,因为SQL Server要修改 ...
- 前端如何处理十万级别的大量数据
给 「前端开发博客」 加星标,每天打卡学习 长按二维码即可识别"进入网页"查看哟~ 1.前端如何处理十万级别的大量数据 写博客主要是用来总结.巩固知识点,加深自己对这个知识点的理解 ...
- [曲苑杂谈]mac\windows phpstorm快捷键
下载链接:https://www.jetbrains.com/phpstorm/documentation/PhpStorm_ReferenceCard.pdf
- 抄袭、模仿、借鉴、创新,曲苑杂谈。
你能分清这四个词吗?我试着先从最小的地方来说说看. 抄袭与模仿 之所以放到一起,因为这是最难划分的一对,最难判断的一对,而更重要的是抄袭是贬义是恶劣的行为,而模仿是中性.或者说抄袭是绝对的反面可以无情 ...
- 如何处理几十万条并发数据_Swoole 如何处理高并发以及异步 I/O 的实现
Swoole 介绍 1.swoole提供了PHP语言的异步多线程服务器,异步TCP/UDP网络客户端,异步MySQL,异步Redis, 数据库连接池,AsyncTask,消息队列,毫秒定时器,异步文件 ...
- Flink应如何处理窗口中迟到的数据?
一.如何处理迟到的数据 三个步骤: .1 设置水位线延迟时间 因为水位线的延迟主要是用来对付分布式网络传输导致的数据乱序,而网络传输的乱序程度一般并不会很大,大多集中在几毫秒至几百毫秒.所以实际应用中 ...
- 如何处理几十万条并发数据?
用存储过程或事务.取得最大标识的时候同时更新.注意主键不是自增量方式这种方法并发的时候是不会有重复主键的,取得最大标识要有一个存储过程来获取. 转载于:https://www.cnblogs.com/ ...
最新文章
- 关于“INS-40922 Invalid Scan Name – Unresolvable to IP address”
- SQL语句利用日志写shell
- C语言循环队列的实现方法,C语言循环队列(数组实现)
- java 远程debug 内网_java jdb remote debug - java远程调试
- python docker自动化_「docker实战篇」python的docker爬虫技术-移动自动化控制工具安卓ADB的使用(15)...
- CLin 和 IDEA创建文件时自动添加作者和时间信息 + 多个.cpp文件在CLion下运行问题...
- 【排序】内部排序算法实现
- Harmony OS — TabList和Tab分页栏
- leetcode刷题日记- 超级次方
- 通俗地讲解傅立叶分析和小波分析间的关系
- 小米机器如何无root激活XPOSED框架的流程
- Python爬虫实战——Quora网站文字自动化爬取和正则匹配筛选信息
- 美国enom域名的优势
- JavaEE中的依赖性——依赖性注入
- Linux修改只读文件(Read-Only)的方法
- 2022基金从业人员资格管理及后续职业培训 部分答案(自答)
- google的秘密入口+搜索技巧
- 上一页 1 2 3 ... 10 下一页 固定分页
- 昨天学了js的控制css样式,自己做了个算卦小程序
- 电源模块设计过程(降压、正压转负压)-MC34063
热门文章
- 应用泛函分析—距离空间
- 80004005错误代码_0x80004005,手把手教你解决0x80004005错误代码的方法
- xml文件中SQL语句的大于号、小于号、等于号的转义问题
- eas bos根据合同类别过滤自定义核算项目
- 微信公众账号开发教程(二) 基础框架搭建——转自http://www.cnblogs.com/yank/p/3392394.html...
- R语言中交集,并集,补集,差集的方法:向量和数据框
- SpringBoot+redis时事务和SessionCallback的使用和抉择
- Excel中行数据转换为Java对象
- 使用UltraISO制作U盘系统启动盘图文教程
- python有几级等级考试成绩查询_python查询46级成绩