Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 почему нет дедлока?  [new]
no deadlock
Guest
почему вот такое проходит?
create table dbo.t1 (id int, val int);
insert into t1(id, val) values (1,1), (2,2), (3,3), (4,4);

create table dbo.t2 (id int, val int);
insert into t2(id, val) values (0,0), (4,44);

create table dbo.t3 (id int, val int);
insert into dbo.t3(id, val)
select id, val
from dbo.t1;

insert into dbo.t3(id, val)
select id, val
from dbo.t2 a
where not exists(select id from dbo.t3 s where a.id = s.id);


мне казалось, при инсерте должна была эксклюзивно заблокироваться таблица t3, куда вставляем.
а сервер позволяет из нее же вычитывать, это как?
4 сен 12, 18:10    [13113574]     Ответить | Цитировать Сообщить модератору
 Re: почему нет дедлока?  [new]
Glory
Member

Откуда:
Сообщений: 104751
no deadlock
мне казалось, при инсерте должна была эксклюзивно заблокироваться таблица t3, куда вставляем.
а сервер позволяет из нее же вычитывать, это как?

Наверное потому, что сначала выполнится select, а только потом insert. А не параллельно.
4 сен 12, 18:11    [13113585]     Ответить | Цитировать Сообщить модератору
 Re: почему нет дедлока?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Для дедлока надо как бы две сессии.
4 сен 12, 18:13    [13113591]     Ответить | Цитировать Сообщить модератору
 Re: почему нет дедлока?  [new]
no deadlock
Guest
о, ну просто шикарно!
т.е. чтение происходит всего 1 раз, до вставки?
тут попытка некоторых реализовать уникальную вставку типа merge,
где из второй таблицы надо вставить только недостающие ВО ВСТАВЛЯЕМОЙ ТАБЛИЦЕ строки, на match ничего не делать, и чтоб не было дупликатов.
если же во второй таблице есть дупликаты, они спокойно вставятся, т.к. не будет перечитывание полученного во время вставки.
о-о, спасибо
4 сен 12, 18:22    [13113624]     Ответить | Цитировать Сообщить модератору
 Re: почему нет дедлока?  [new]
no deadlock
Guest
Гавриленко Сергей Алексеевич
Для дедлока надо как бы две сессии.

да уж писали, что и одной хватит. типа описать пользовательский тип и его же тут же задействовать
4 сен 12, 18:23    [13113628]     Ответить | Цитировать Сообщить модератору
 Re: почему нет дедлока?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
no deadlock
Гавриленко Сергей Алексеевич
Для дедлока надо как бы две сессии.

да уж писали, что и одной хватит. типа описать пользовательский тип и его же тут же задействовать
И что? Вы здесь видите создание пользовательского типа? Или теперь всегда про этот кейс надо упоминать?
4 сен 12, 18:25    [13113641]     Ответить | Цитировать Сообщить модератору
 Re: почему нет дедлока?  [new]
Glory
Member

Откуда:
Сообщений: 104751
no deadlock
т.е. чтение происходит всего 1 раз, до вставки?

Для этого смотрят план выполнения ?

no deadlock
где из второй таблицы надо вставить только недостающие ВО ВСТАВЛЯЕМОЙ ТАБЛИЦЕ строки, на match ничего не делать, и чтоб не было дупликатов.
если же во второй таблице есть дупликаты, они спокойно вставятся, т.к. не будет перечитывание полученного во время вставки.

Для этого вообще то устанавливают TIL или указывают блокировки в хинтах

А вообще уникальность обеспичивает только уникальный индекс/констрейт
4 сен 12, 18:25    [13113642]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить