Вставка mysql после удаления не удалась из-за «повторяющейся записи» - PullRequest
9 голосов
/ 21 июля 2011

У меня есть код с двумя запросами mysql.
DELETE FROM my_table WHERE user_id=some_number
INSERT INTO my_table (user_id, ... ) VALUES(some_number, ...)

Поле user_id уникально.

В редких случаях происходит сбой вставки, утверждая, что произошла повторная запись. Мой первый инстинкт заставляет меня поверить, что УДАЛЕНИЕ не закончилось, и теперь вставка пытается вставить, и я получаю дубликат записи. Это возможно? Как я могу избежать этого? Можно ли придумать другое объяснение?

Обновление: причина, по которой я удаляю, заключается в том, что я хочу удалить все данные, которые я не обновляю / вставляю в первый раз. Кроме того, я считаю важным заявить, что большая часть данных остается неизменной.

Ответы [ 5 ]

2 голосов
/ 21 июля 2011

Вместо этого используйте оператор UPDATE:

UPDATE my_table
SET my_column = my_value
WHERE user_id = some_number
2 голосов
/ 21 июля 2011
SET AUTOCOMMIT=0;    
START TRANSACTION;    
DELETE FROM my_table WHERE user_id=some_number;     
INSERT INTO my_table (user_id, ... ) VALUES(some_number, ...); 
commit;
1 голос
/ 21 июля 2011

Почему вы DELETE, а затем INSERT то же самое user_id, а не просто UPDATE строка?

1 голос
/ 21 июля 2011

Вы всегда можете попробовать COMMIT после УДАЛИТЬ, чтобы убедиться, что он завершен.

0 голосов
/ 15 июня 2015

Это происходит потому, что запрос обрабатывается как две отдельные транзакции, поэтому порядок выполнения не гарантируется. Эффект, который вы описываете, заключается в том, что вставка обрабатывается перед удалением. Вы должны изменить логику запроса или выполнить оба запроса в одной транзакции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...