MySQL вставлять в дубликат ключа; Удалить?
Есть ли способ удалить запись в дубликат ключа в MySQL?
Скажем, у нас есть запись в базе данных с конкретным первичным ключом, и мы пытаемся добавить еще один с тем же ключом. ON DUPLICATE KEY UPDATE
просто обновит запись, но есть ли возможность удалить запись, если она уже существует? Он предназначен для простых функций ввода/вывода одним нажатием кнопки.
Ответы
Ответ 1
Это обход, но он работает:
Создайте новый столбец и назовите его do_delete
или что-то еще, сделав его крошечным-int. Тогда do On Duplicate Key Update do_delete = 1;
В зависимости от вашей версии MySQL/соединения вы можете выполнять несколько запросов в одном и том же выражении. Однако, если нет, просто запустите отдельный запрос сразу же послесловия. В любом случае следующий запрос будет выглядеть следующим образом: Delete From [table] Where do_delete = 1;
. Таким образом, если это новая запись, она ничего не удалит. Если это не новая запись, она затем помечает ее для удаления, после чего вы можете ее удалить.
Ответ 2
Используйте ЗАМЕНИТЬ ВПЕРЕД:
replace into some_table
select somecolumn from othertable
будет либо вставлять новые данные, либо если те же самые данные будут удалены, и вставьте новый
Ответ 3
Ближайшим возможным решением для него является оператор REPLACE
. Вот документация для REPLACE.
Аналогичный вопрос задавали на Форумы MySQL и рекомендуется (и только) ответ должен был использовать REPLACE
.
Ответ 4
Да, конечно, в MySQL есть решения для вашей проблемы.
Если вы хотите удалить или пропустить новую запись вставки, если в ключевом столбце таблицы существует дублирующаяся запись, вы можете использовать IGNORE следующим образом:
insert ignore into mytbl(id,name) values(6,'ron'),(7,'son');
Здесь id
- первичный ключ в таблице mytbl
. Это добавит несколько значений в таблицу, удалив или пропустив новые повторяющиеся записи.
Надеюсь, это выполнит ваше требование.