Я использую блокировки и транзакции, как программист VBA Excel, пытаясь написать многопоточный сервер C ++ впервые ...
Я пытался спросить совета у моих коллег, но хотя мы все достаточно хороши (или мы так думаем) в разработке сложных баз данных, написании быстрых и эффективных запросов, использовании индекса и ограничений, когда это необходимо, и так далее Никто из нас не обладает хорошим знанием этой темы.
Все онлайн-ресурсы, которые я нашел, являются либо синтаксическими ссылками, либо фиктивными учебниками, объясняющими, что транзакция начинается с 'begin tran' и заканчивается фиксацией или откатом.
Я тоже просмотрел ТАК без успеха.
Что я ищу, так это список простых реальных проблем, а также правильный способ их решения.
Пример:
Допустим, у меня есть таблица с одним активным битовым столбцом, и я не хочу иметь две активные строки одновременно. Конечно, многие процессы могут пытаться вставлять данные одновременно.
- я должен заблокировать всю таблицу?
- или, может быть, использовать ограничение данных, чтобы вставка второй «активной» строки не удалась?
- или использовать транзакцию с повторяемым уровнем изоляции для чтения?
или, может быть, напишите:
update tbFoo set Active = 0
вставить в tbFoo (foo, Active), выбрать «foo», 1 там, где его нет (выбрать * из tbFoo, где Active = 1)
Пожалуйста, не комментируйте / не отвечайте на эту конкретную проблему и на мои глупые предложения. Я просто пытаюсь определить тот факт, что я не имею понятия:)
Где я могу найти несколько хороших прохождений по простым, но актуальным ситуациям блокировки? Если что-то изменится, я использую SQL Server 2008
Мне также любопытно узнать, чувствуют ли другие люди то же самое, что и я по этим темам.