Альтернатива MySQL «Таблице блокировок» в хранимой процедуре - PullRequest
2 голосов
/ 06 сентября 2011

У меня есть требование вставить строку в таблицу, если строка еще не существует, и мне нужно сделать это с помощью хранимой процедуры. Поэтому мне нужно выбрать, чтобы проверить, если строка уже существует, а затем вставить. Чего я хочу избежать, так это состояния гонки, при котором 2 вызывающих абонента хранимой процедуры могут увидеть, что строка не существует, а затем оба пытаются вставить строку.

Мои первые мысли по поводу решения этой проблемы состоят в блокировке таблицы, но, к сожалению, вы не можете выдать LOCK TABLE в хранимой процедуре.

Я хочу избежать перехвата исключения клиента при вставке дубликата ключа (C #).

Есть ли способ блокировки стола или альтернативные решения?

Ответы [ 2 ]

2 голосов
/ 06 сентября 2011

вы можете использовать

insert into ... on duplicate key

посмотрите пример ответа @thummper:

При игнорировании дубликата ключа?

0 голосов
/ 22 сентября 2012

Другой вариант - использовать

INSERT IGNORE INTO ... 

, и, если у вас есть уникальный ключ, который будет нарушен в результате этой вставки дважды, это не будет сделано во второй раз.

...