MySQL альтернатива «блокировке» в хранимой процедуре
-
26-10-2019 - |
Вопрос
У меня есть требование вставить строку в таблицу, если строка еще не существует, и мне нужно сделать это с помощью хранимой процедуры. Поэтому мне нужно выбрать, чтобы проверить, существует ли строка, а затем вставка. Чего я хочу избежать, так это условие гонки, в котором 2 вызывающих абонента из хранимой процедуры могут увидеть, что строка не существует, а затем оба пытаются вставить строку.
Мои первые мысли об решении этого - это заблокировать стол, но, к сожалению, вы не можете выпустить LOCK TABLE
в хранимой процедуре.
Я хочу избежать улавливания исключения для вставки дубликата ключа у клиента (C#).
Любой способ заблокировать таблицу или альтернативные решения?
Решение
вы можете использовать
insert into ... on duplicate key
Посмотрите на пример @Thummper Ответ:
Другие советы
Другой вариант - использовать
INSERT IGNORE INTO ...
И до тех пор, пока у вас есть уникальный ключ, который будет нарушен этой вставкой, которая происходит дважды, это не будет сделано во второй раз.