大家好,小弟系統中有一張表tab,有多用戶同時對該表進行增刪改查。現在問題是update的時候經常出現死鎖。
基本情況是這樣的:
1、update:操作的是唯一記錄,不可能同時有多人update一條記錄,也不可能一人同時update多條記錄;
2、delete:不可能多人同時delete一條記錄,但一人同時可delete多條記錄;
我已對update和delete的where后的條件字段加了索引。在update的時候,使用了WITH (ROWLOCK)。問:
1、出現死鎖的原因是否是insert、delete時,整張表被鎖了,因此update無法進行?
2、sqlserver的insert、delete、update默認是表鎖還是行鎖,如果我將delete也設為行鎖,那么在一次delete多條記錄的時候是不是會生成多個鎖,導致性能下降?
謝謝,謝謝~~
------回答---------
------其他回答(5分)---------
- SQL code
-
------其他回答(10分)---------
不要迷戀行鎖,行鎖只是傳說
SQL的鎖會自動升級。
應想法提高整體的性能,比如一般一次更新整批數據比一條一條更新效率高,更新何刪除的條件一定要有好的索引
------其他回答(10分)---------
1,如果涉及數據量大的情況,會升級為表鎖。
2,在有索引且涉及數據量不大的情況下是默認是行鎖。
------其他回答(10分)---------
可禁用表升級,怎么禁用自己網上查下,
但禁用的話也有壞處,搞不好會系統崩潰的,
盡量不要使用‘禁用表升級’。
------其他回答(5分)---------
增加一個專門用於是否數據被鎖的表,只要前台點UPDATE,就將個條數據放入到表中去,並且在前召程序中宣布該條數據被鎖,禁止查看,OK?