MySQL альтернатива «блокировке» в хранимой процедуре

StackOverflow https://stackoverflow.com/questions/7317449

  •  26-10-2019
  •  | 
  •  

Вопрос

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

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

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

Любой способ заблокировать таблицу или альтернативные решения?

Это было полезно?

Решение

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

insert into ... on duplicate key

Посмотрите на пример @Thummper Ответ:

На дублировании ключа игнорируется?

Другие советы

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

INSERT IGNORE INTO ... 

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top