• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase
您的位置:首页 > 数据库 >Mysql > 锁不住的查询

锁不住的查询

作者:匿名 字体:[增加 减小] 来源:互联网 时间:2018-12-05

匿名通过本文主要向大家介绍了database,测试等相关知识,希望本文的分享对您有所帮助

最近在处理一个锁的问题时,发现一个比较郁闷的事,使用X锁居然无法锁住查询,模拟这个问题,可以使用如下T-SQL脚本来建立测试环境。

USE master;
GO
IF @@TRANCOUNT > 0
ROLLBACK TRAN;
GO
-- =======================================
-- 建立测试数据库
-- a. 删除测试库, 如果已经存在的话
IF DB_ID(N'db_xlock_test') IS NOT NULL
BEGIN;
ALTER DATABASE db_xlock_test
SET SINGLE_USER
WITH
ROLLBACK AFTER 0;
DROP DATABASE db_xlock_test;
END;
-- b. 建立测试数据库
CREATE DATABASE db_xlock_test;
-- c. 关闭READ_COMMITTED_SNAPSHOT 以保持SELECT 的默认加锁模式
ALTER DATABASE db_xlock_test
SET READ_COMMITTED_SNAPSHOT OFF;
GO
-- =======================================
-- 建立测试表
USE db_xlock_test;
GO
CREATE TABLE dbo.tb(
id int IDENTITY
PRIMARY KEY,
name sysname
);
INSERT dbo.tb
SELECT TOP(50000)
O1.name + N'.' + O2.name + N'.' + O3.name
FROM sys.objects O1 WITH(NOLOCK),
sys.objects O2 WITH(NOLOCK),
sys.objects O3 WITH(NOLOCK);
GO


然后,建立一个连接,执行下面的脚本来实现加锁。

-- =======================================
-- 测试连接1 - 加锁
BEGIN TRAN
--测试的初衷是通过SELECT加锁,结果发现UPDATE也锁不住
UPDATE dbo.tb SET name = name
--SELECT COUNT(*) FROM dbo.tb WITH(XLOCK)
WHERE id <= 2;
SELECT
spid = @@SPID,
tran_count = @@TRANCOUNT,
database_name = DB_NAME(),
object_id = OBJECT_ID(N'dbo.tb', N'Table');
-- 显示锁
EXEC sp_lock@@SPID;

通过执行结果,可以看到对象被加锁的情况:表级和页级上是IX锁,记录上是X锁。

spid

tran_count

database_name

object_id


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 用MyEclipse配置DataBase Explorer(图示)
  • mysql提示[Warning] Invalid (old?) table or database name问题的解决方法
  • mysql database manual(mysql数据库手册)
  • MySQL SHOW 命令的使用介绍
  • MySQL中show命令方法得到表列及整个库的详细信息(精品珍藏)
  • MySQL show命令的用法
  • 通过mysql show processlist 命令检查mysql锁的方法
  • 锁不住的查询
  • sql server:alter database name的问题
  • CREATE DATABASE语句解释

相关文章

  • 2018-12-05浅谈MySQL漂流记(一)
  • 2018-12-05mysql 查
  • 2017-05-11Mysql 主从数据库同步(centos篇)
  • 2018-12-05【设置字符集】Win7 64位系统安装MySQL5.5.21图解教程_MySQL
  • 2018-12-05oracle初始化参数设置
  • 2017-05-11MySQL性能优化之Open_Table配置参数的合理配置建议
  • 2018-12-05mysql 存储过程中变量的定义与赋值操作
  • 2018-12-05AutoMySQLBackup实现数据库定期备份
  • 2017-05-11mysql备份恢复mysqldump.exe几个常用用例
  • 2018-12-05Oracle中AIO解析

文章分类

  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase

最近更新的内容

    • MySQL选择合适的引擎及引擎转换的详解
    • 使用cmd命令行窗口操作SqlServer的方法
    • 关于服务器连接错误的详细介绍
    • mysql 数据表中查找重复记录
    • 从4个方面实战Oracle的密码操作
    • mysql复制表字段到另外一个表的字段
    • oracle 声明游标(不具备字段)规则应用
    • mysql 协议的初始化DB命令包及解析
    • mongodb性能优化
    • MySQL如何实现多表查询?MySQL多表查询的语句

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有