更新并在同一事务中选择一行

时间:2015-03-10 17:44:10

标签: sql-server database

是否可以UPDATE一行,然后SELECT来自同一事务内同一行的更新数据而不用担心死锁?

4 个答案:

答案 0 :(得分:6)

使用OUTPUT子句执行此操作。

Update table_name
set col1='some_value'
output inserted.* 

答案 1 :(得分:1)

是的,如果你在同一个事务中运行这两个语句,它们不应该在它们之间死锁

如果您害怕与其他事务发生死锁,您应该使用WHERE中的索引UPDATE子句尽可能减少事务导致的锁定,并尽可能避免SERIALIZABLE隔离级别。 (ReadCommitted为你做的伎俩?)

答案 2 :(得分:1)

是的,那应该没问题。当两个单独的SQL会话尝试同时访问同一记录时,会发生死锁。因为更新和选择发生在同一个事务中,它将强制它们按顺序发生。但是,如果多个源正在运行您的事务,则可能导致死锁。

答案 3 :(得分:0)

要选择插入的值,请使用以下查询

UPDATE SET maths = 20,biology = 21 OUTPUT INSERTED.maths, INSERTED.biology WHERE student_id = 12

要选择上一个值,请使用

UPDATE SET maths = 20 OUTPUT DELETED.maths WHERE student_id = 12