При предположението, че това е MS SQL сървър, вероятно искате UPDLOCK
, евентуално комбиниран с ROWLOCK
(Съвети за таблица
). Имам проблеми с намирането на прилична статия, която описва теорията, но ето бърз пример:
SELECT id From mytable WITH (ROWLOCK, UPDLOCK) WHERE id = 1
Това изявление ще постави заключване за актуализиране на реда за продължителността на транзакцията (затова е важно да сте наясно кога транзакцията ще приключи). Тъй като заключванията за актуализиране са несъвместими с изключителните заключвания (изисква се за актуализиране на записите), това ще попречи на всеки да актуализира този запис, докато транзакцията не приключи.
Обърнете внимание, че други процеси, опитващи се да модифицират този запис, ще бъдат блокирани, докато транзакцията завърши, но ще продължат с каквато операция за запис са поискали, след като транзакцията приключи (освен ако времето за изчакване не е изтекло или са изключени като блокиран процес). Ако искате да предотвратите това, тогава другите ви процеси трябва да използват допълнителни подсказки, за да прекъснат, ако бъде открито несъвместимо заключване, или да пропуснат записа, ако е променен.
Също така, Не трябва да използвате този метод за заключване на записи, докато чакате потребителско въвеждане . Ако това е вашето намерение, тогава трябва да добавите някакъв вид колона "се променя" към вашата таблица вместо това.
Механизмите за заключване на SQL сървъра наистина са подходящи само за използване за запазване на целостта на данните/предотвратяване на блокировки – транзакциите обикновено трябва да се поддържат възможно най-кратки и със сигурност не трябва да се поддържа, докато се чака въвеждане от потребителя.