加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

sql-server – 锁定CREATE TABLE

发布时间:2021-04-01 07:29:47 所属栏目:编程 来源:网络整理
导读:在另一个应用措施中,我被糟糕的计划所震撼:多个线程同时执行Ensure DatabaseSchemaExists()要领,看起来根基上是这样的: IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'MyTable') AND type = N'U') BEGIN CREATE TABLE MyTable (

在另一个应用措施中,我被糟糕的计划所震撼:多个线程同时执行Ensure DatabaseSchemaExists()要领,看起来根基上是这样的:

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'MyTable') AND type = N'U') BEGIN

    CREATE TABLE MyTable ( ... );

END

可是,纵然在SERIALIZABLE事宜中执行,此代码好像也不是线程安详的(即并行代码实行多次建设表).有没有机遇逼迫SELECT语句获取一个锁,以防备另一个线程执行沟通的SELECT语句?

多线程 – EnsureSchemaExists()要领有更好的模式吗?

办理要领

您最好的选择是行使显式包括事宜并获取自界说独有锁以掩护整个操纵(SELECT和CREATE TABLE) using sp_getapplock.体系工具不遵循断绝级别哀求并以与用户表沟通的方法行使锁定,通过计划.

原始代码中的竞争前提是,在任何线程得到CREATE TABLE语句之前,多个线程可以断定该表不存在.

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读