回答

收藏

线程安全吗?SQL Server上述任何等效项)

技术问答 技术问答 189 人阅读 | 0 人回复 | 2023-09-14

在SO在别人的帮助下,今天早上,我非常接近表数据库和存储过程,因为我离表数据库很近DB程序员还很远。2 v, o3 u+ o/ a7 n' F
有人介意解释并告诉我线程是否安全吗?我想这可能不是DBA /
: [! N: h" `: F) @3 t' b* qDB但我希望你能理解开发人员使用的术语:基本上,如果是这样的话sp它正在执行,另一个同时发生了什么?一个能干扰另一个吗?这甚至是SQL /
' W5 ~/ t3 R- cSP有问题吗?
4 Y6 {- \) r5 D; nCREATE PROCEDURE [dbo].[usp_NewTicketNumber]    @ticketNumber int OUTPUTASBEGIN    SET NOCOUNT ON;    INSERT INTO [TEST_Db42].[dbo].[TicketNumber]               ([CreatedDateTime],[CreatedBy])         VALUES                (GETDATE(),SUSER_SNAME()    SELECT @ticketNumber = IDENT_CURRENT('[dbo].[TicketNumber]     RETURN 0;END                4 _" i5 B2 y6 e$ K% x. l/ r6 k
    解决方案:                                                                : x" s) _2 T& _  }) u' B
                                                                你可能不想用IDENT_CURRENT-这将返回在任何会话和问题表上生成的最新标志。如果其他人在错误的时间插入,你会得到他们的ID!
& b( f6 i: z" w$ H" L8 O. k+ y如果要获取刚刚执行的插入操作生成的标识,则最好使用OUTPUT检索子句。因此,通常使用它。SCOPE_IDENTITY(),但在并行执行计划下存在问题。  _* v( u0 R. i
与SQL等效线程安全性主要在执行多个导致事故或不良行为的句子时执行。我能想到的两种主要行为类型是锁定(尤其是死锁)和并发问题。0 x3 [9 p. M8 J: l2 L8 p( }
当一个句子停止访问其他句子正在处理的行时,就会出现锁定问题。这可能会影响性能。在最坏的情况下,两个句子会发生不协调的变化和死锁,导致一个句子终止。
0 I7 h3 u/ ]0 f, d1 H但是,除非涉及的简单插入不应该导致锁定,除非涉及其他事务(如数据库事务)。
+ F( H& y# [8 M% Y并发问题(描述不好)是由数据库记录的一组变更引起的,覆盖了同一记录的其他变更。同样,插入记录不应该是问题。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则