是否可以UPDATE
一行,然后SELECT
来自同一事务内同一行的更新数据而不用担心死锁?
答案 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