Гость
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Вопрос по одновременной вставке записи с одним ключем / 6 сообщений из 6, страница 1 из 1
30.01.2017, 13:58
    #39394641
YuRock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по одновременной вставке записи с одним ключем
Детский вопрос.

Есть таблица

Код: sql
1.
2.
3.
CREATE TABLE TABLE1 (
    ID INTEGER NOT NULL PRIMARY KEY
);



ID в ней не из генератора - это сущность из другой таблицы. Сама эта таблица - некий кэш, который время от времени очищается и затем снова наполняется по мере необходимости.

Есть две транзакции RWRC (read_committed,rec_version,nowait)

Обе они пытаются вставить одинаковую запись

Код: sql
1.
INSERT INTO TABLE1 ( ID ) VALUES ( 100 )



Вопрос. Существует ли штатный механизм, как сделать так, чтобы гарантированно ибежать lock_conflict и unique_key_violation (если запись с таким клчем уже есть, то просто не вставлять запись)?

У меня сейчас
Код: sql
1.
2.
IF ( NOT EXISTS ( SELECT FIRST 1 1 FROM TABLE1 WHERE ID = 100 ) ) THEN
  INSERT INTO TABLE1 ( ID ) VALUES ( 100 );


И обработчик исключения. Которое крайне редко возникает (и если возникает - ничего страшного, главное что запись уже есть), т.ч. работает приемлемо.

Но хотелось бы узнать - можно ли сделать лучше? Как-то MERGE применить например, или еще что? Спасибо.
...
Рейтинг: 0 / 0
30.01.2017, 14:04
    #39394651
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по одновременной вставке записи с одним ключем
YuRockСуществует ли штатный механизм, как сделать так, чтобы гарантированно ибежать
lock_conflict и unique_key_violation (если запись с таким клчем уже есть, то просто не
вставлять запись)?

Нет.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
30.01.2017, 14:09
    #39394658
rdb_dev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по одновременной вставке записи с одним ключем
YuRockНо хотелось бы узнать - можно ли сделать лучше? Как-то MERGE применить например, или еще что? Спасибо.
Может триггер BEFORE INSERT или оператор UPDATE OR INSERT INTO <table_name> (<fields>) VALUES (<values>) MATCHING (<fields>) ?
...
Рейтинг: 0 / 0
30.01.2017, 14:10
    #39394660
rdb_dev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по одновременной вставке записи с одним ключем
rdb_dev, не, триггер не подойдет.
...
Рейтинг: 0 / 0
30.01.2017, 14:21
    #39394675
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по одновременной вставке записи с одним ключем
Hello, Yurock!
You wrote on 30 января 2017 г. 14:12:26:

Yurock> И обработчик исключения. [skipped] работает приемлемо.ну и не парься.
без сериализации задачу не решить.
можешь конечно лочить всю таблицу (см. "резервирование таблиц http://www.ibase.ru/ibtrans),
но оно тебе надо?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
30.01.2017, 15:14
    #39394761
YuRock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по одновременной вставке записи с одним ключем
Мимопроходящийно оно тебе надо?
Нет, не надо :)
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Вопрос по одновременной вставке записи с одним ключем / 6 сообщений из 6, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]