Quantcast
Channel: SQL.ru: Firebird, InterBase
Viewing all articles
Browse latest Browse all 1677

Вопрос по одновременной вставке записи с одним ключем

$
0
0
Детский вопрос.

Есть таблица

CREATE TABLE TABLE1 (
    ID INTEGER NOT NULL PRIMARY KEY
);


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

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

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

INSERT INTO TABLE1 ( ID ) VALUES ( 100 )


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

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

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

Но хотелось бы узнать - можно ли сделать лучше? Как-то MERGE применить например, или еще что? Спасибо.

Viewing all articles
Browse latest Browse all 1677

Trending Articles