Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как заблокировать строку SELECT-ом, если её ещё нет?  [new]
NIIIK
Member

Откуда: Россия, Ростовская область, г. Таганрог
Сообщений: 1295
Все доброе время суток

Предположим я выбрал в ТРАНЗАКЦИИ строку SELECT-ом, по какому-то условию.

select *
  from table t
where t.UserID = @UserID


Но такого пользователя НЕ нашлось. А уровень изоляции стоял у меня Repeatable read.
Транзакция всё ещё висит

Далее я пытаюсь вставить в другой транзакции строку и это получается.
Апдейт бы висел бы и ждал. Но там строка заведомо должна быть.

Я же ожидал что у меня вторая транзакция не вставит данные пока висит первая.
Своего рода select for update.

Есть возможность добиться такого? А то тут важно, логика "на клиенте БД" (ОРМка гадская). И каждый раз дёргается база и боюсь что пока я смотрю на то что данных по нужному условию нет - другой поток их вставит.
19 ноя 15, 21:23    [18444105]     Ответить | Цитировать Сообщить модератору
 Re: Как заблокировать строку SELECT-ом, если её ещё нет?  [new]
Mike_za
Member

Откуда: Москва
Сообщений: 1176
NIIIK,

Serializeble?
19 ноя 15, 21:26    [18444128]     Ответить | Цитировать Сообщить модератору
 Re: Как заблокировать строку SELECT-ом, если её ещё нет?  [new]
NIIIK
Member

Откуда: Россия, Ростовская область, г. Таганрог
Сообщений: 1295
Mike_za,
Да, спасибо!
19 ноя 15, 21:36    [18444161]     Ответить | Цитировать Сообщить модератору
 Re: Как заблокировать строку SELECT-ом, если её ещё нет?  [new]
Mike_za
Member

Откуда: Москва
Сообщений: 1176
NIIIK,

А так другой поток тоже успеет сделать селект и будет дедлок
11 дек 15, 21:14    [18548867]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить