SQL Server Express 和 SQL Server 2005 上的事务隔离和读取多个表

2024-02-11

我有一个数据库,其中有一个主表(我们称之为所有者)和几个包含资产的子表(如汽车、书籍等)。

例如:

  • Owner有列:owner_id, name
  • Cars有列:owner_id (foreign key), brand
  • Books有列:owner_id (foreign key), title, author

我的程序应该计算统计数据,例如有多少宝马车主还拥有一本哈利·波特书使用各种第三方库。我想同时读取所有表中的所有行,然后用非sql代码进行分析。

我想使用单独的方式读取所有表格Select * From X声明。我无法使用一个大连接,因为它会返回太多行((所有者 * 汽车 * 书籍)而不是(所有者 + 汽车 + 书籍))。联合也不会削减它,因为表包含不同类型的不同列。

我已经设定

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE

但我还是有一些问题。

如果我通过运行两个线程来对数据库施加压力,一个随机插入或删除,另一个读取,有时会得到不一致的结果,例如Cars在阅读之间已被删除Owners并阅读Cars table.

我有几个问题:

  1. 从多个表逐一读取时防止修改的正确方法是什么?在读取所有表之前,不得修改任何表。

    我正在使用 SQL Server 2005(网络上)和 SQL Server 2005 Express(本地)。我可以同时显式地获取多个表的锁吗?

  2. 如果我针对本地 SQL Server Express 数据库运行,则无论我做什么都无法使其工作。如果我针对联网的 SQL Server 2005 数据库运行,我可以让它工作(需要付出一些努力)。 SQL Server Express 是否支持事务隔离级别 SERIALIZABLE?我相信应该如此。差异可能是由于网络连接速度慢造成的,但我不知道。

    在我的本地数据库上,我无法阻止读取之间的修改。也就是说,一个线程随机删除一个随机所有者(首先是汽车,然后是书籍,然后是所有者)或插入一个新所有者(插入所有者,插入 2 辆车,插入 2 本书)。另一个线程正在阅读使用:

    Begin Tran
    Select owner_id From Owner
    Select owner_id, brand From Cars
    Select owner_id, title, author From Books
    Commit Tran
    

    无论我做什么,有时我都会遇到拥有零辆汽车或零本书的车主。这种情况永远不应该发生,因为所有插入和删除都在单个事务中。我似乎快递服务器不会同时锁定所有者、汽车和书籍语句。

    在联网的 SQL Server 2005 上,它工作正常,但这可能是因为连接速度较慢,因此同时执行的可能性较低。

  3. 在我的本地数据库上,我用虚拟开始每笔交易Select来自所有表以防止死锁。我不明白为什么这可以防止死锁,但不能防止表的修改。这在联网的 SQL Server 2005 上不是必需的。

目前,我无法判断我是否误解了事务隔离,或者这是否是 SQL Server Express 和 SQL Server 2005 之间差异的问题。任何帮助或见解将不胜感激。


您选择一次性加载所有数据意味着很少的选择:

  • 使用sp_getapplock通过相关代码来序列化访问
  • 在事务中的读取上使用 TABLOCKX、HOLDLOCK

你有问题是因为SET TRANSACTION ISOLATION LEVEL SERIALIZABLE只影响隔离锁的数量:你需要控制duration (HOLDLOCK) and 粒度 + mode (TABLOCKX)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQL Server Express 和 SQL Server 2005 上的事务隔离和读取多个表 的相关文章

  • postgresql:插入...(选择*...)

    我不确定它是否是标准 SQL INSERT INTO tblA SELECT id time FROM tblB WHERE time gt 1000 我正在寻找的是 如果 tblA 和 tblB 位于不同的数据库服务器中怎么办 Postg
  • 将两个表合并为一个输出

    假设我有两张表 已知营业时间 ChargeNum CategoryID Month Hours 111111 1 2 1 09 10 111111 1 3 1 09 30 111111 1 4 1 09 50 222222 1 3 1 09
  • 3 个表的 SQL 查询(或联接)

    第一次在 Stack Overflow 上问问题 很棒的资源 但是只有一件事真正让我作为 SQL 新手感到困惑 我有三个表 我想获取与鲍勃的学生相关的所有导师的姓名 表 1 教师 ID Name 1 Bob 表 2 学生 STUDENT I
  • SQL Server:为什么 ISO-8601 格式的日期依赖于语言?

    我需要一些帮助来理解 SQL Server 中的日期格式处理 如果您尝试以下操作 它将返回正确的结果 SET LANGUAGE English SELECT CAST 2013 08 15 AS DATETIME 2013 08 15 00
  • IIF(...) 不是公认的内置函数

    我正在尝试在 Microsoft SQL Server 2008 R2 中使用它 SET SomeVar SomeOtherVar IIF SomeBool value when true value when false 但我收到一个错误
  • 插入记录后如何从SQL Server获取Identity值

    我在数据库中添加一条记录identity价值 我想在插入后获取身份值 我不想通过存储过程来做到这一点 这是我的代码 SQLString INSERT INTO myTable SQLString Cal1 Cal2 Cal3 Cal4 SQ
  • 更改mysql数据库表中的日期格式

    大家早上好 只是一个简单的问题 在我现有的 MySql 数据库中 我几乎没有包含日期 的列 目前这些是年 月 日格式 但现在我需要将其全部更改为年 月 日格式 我试过了select date format curdate d m Y 但它不
  • Oracle:按月分区表

    我的解决方案 德语几个月 PARTITION BY LIST to char GEBURTSDATUM Month PARTITION p1 VALUES JANUAR PARTITION p2 VALUES Februar PARTITI
  • SQL 标准是否允许函数名和括号之间有空格

    检查一些 RDBMS 我发现类似的事情 SELECT COUNT a SUM b FROM TABLE 允许 注意聚合函数和括号之间的空格 谁能提供一个指向 SQL 标准本身定义的指针 任何版本都可以 编辑 以上在postgres中工作 m
  • SQL Server 2008。允许远程连接吗?

    我在 Windows XP Pro 机器上安装了 SQL Server 2000 和 2008 我可以在本地连接到两个数据库实例 从另一个机器 Windows 7 机器 中 我可以连接到第一个机器上的 SQL 2000 实例 但无法使用本地
  • 没有提示指令的直连接中表的顺序是否会影响性能?

    所有基于 SQL 的 RDBMS 10 年前的版本 直接连接查询 没有提示指令 中的表顺序是否会对最佳性能和内存管理产生影响 听说最后一个join应该是最大的表 您的数据库的查询优化器如何处理这种情况 回答你的问题 是的 表的顺序在连接中有
  • 可以有一个带有可变列的表吗?

    这可能是一个愚蠢的问题 但这里是 是否可以创建一个能够包含具有可变列数和自定义列名称的行的动态表 我浏览过 EAV 建模 但看起来很沉重 现实生活中的例子可能是这样的 假设我有一个客户登记册 但每个客户可能需要输入不同的信息 根据您要输入的
  • 在 SQL Server 2005 中,len() 和 datalength() 有什么区别?

    SQL Server 2005 中的 len 和 datalength 有什么区别 DATALEN 将返回用于存储值的字节数 http msdn microsoft com en us library ms173486 SQL 90 asp
  • 如何创建没有循环关系的树形表?

    CREATE TABLE TREE node1 id UUID REFERENCES nodes object id NOT NULL node2 id UUID REFERENCES nodes object id NOT NULL CO
  • pymssql 库中的参数绑定是否正确实现?

    我使用 pymsqsql 库从 Python 程序调用极其简单的查询 with self conn cursor as cursor cursor execute select extra id from mytable where id
  • 支持 >65k 行的 Excel VBA SQL 驱动程序

    在 Excel 2010 中通过 VBA 查询 Excel 数据时 我遇到一个有趣的问题 我正在使用这些驱动程序连接到 xls 或 xls x m 文件 Sub OpenCon ByRef theConn As Connection ByV
  • Microsoft SQL:CASE WHEN 与 ISNULL/NULLIF

    除了可读性之外 在防止 SQL 中的除以 0 错误时 使用 CASE WHEN 语句与 ISNULL NULLIF 相比还有什么显着的好处吗 CASE WHEN BeginningQuantity BAdjustedQuantity 0 T
  • 向带有检查约束 SQL 的表添加列

    我想向表中添加一列 然后添加一个检查约束以确保其大于 0 我似乎无法让它在 oracle sl Developer 中运行 Alter TABLE store101 add column Base salary Number 7 2 con
  • 告诉我 SQL Server 全文搜索器疯了,不是我疯了

    我有一些客户具有用户正在搜索的特定地址 123 通用方式 数据库中有 5 行匹配 ResidentialAddress1 123 GENERIC WAY 123 GENERIC WAY 123 GENERIC WAY 123 GENERIC
  • 使用用户定义函数 MySql 时出错

    您好 请帮我解决这个问题 提前致谢 我在数据库中定义了这些函数 CREATE FUNCTION levenshtein s1 VARCHAR 255 s2 VARCHAR 255 RETURNS INT DETERMINISTIC BEGI

随机推荐