У меня есть таблица ...дублирование KEY UPDATE - получение «Integrity нарушения ограничений»
CREATE TABLE `pricing` (
`product_id` int(11) NOT NULL,
`seller_id` varchar(20) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`price` float DEFAULT NULL,
`ship` float DEFAULT NULL,
PRIMARY KEY (`product_id`),
KEY `seller_id` (`seller_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
И когда я пытаюсь запустить INSERT INTO ... ON DUPLICATE KEY UPDATE
, я получаю нарушение ограничения целостности, если я пытаюсь изменить seller_id
:
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '4984-2014-11-23 10:05:20' for key 'PRIMARY'.
запрос SQL является:
INSERT INTO pricing
(product_id, price, ship, seller_id)
VALUES (:product_id, :price, :ship, :seller_id)
ON DUPLICATE KEY UPDATE
seller_id = :seller_id
это желательно Behav IOR? Есть ли способ избежать этого? На данный момент мы используем REPLACE
, но мне любопытно, что я делаю что-то неправильно или нет. Я не обновляю первичный ключ для вас, а другой регулярный неповторимый ключ - и ограничение попадает на первичный ключ.
Каков процесс, который здесь происходит?
EDIT: Я провел SQL Fiddle, и все работает нормально. Почему это может вызвать ошибки на моей машине? :/
(1) Вы уверены, что весь запрос запущен? (Если запрос не включает в себя элемент «ON DUPLICATE KEY ...», он с ошибкой потерпит неудачу.) (2) Существуют ли какие-либо другие уникальные ключи или уникальные индексы? –
(1) Да, потому что когда я меняю его, чтобы обновить другое поле - например, цена - он работает безупречно. (2) Нет, запрос 'CREATE TABLE', который я разместил, является точным, и нет других ключей или индексов. – casraf
Запрос работает очень хорошо для сервера mysql, в котором я запущен. Что вы используете для выполнения запроса? Можете ли вы использовать его для выполнения дескриптора 2 одинаково названных заполнителей? А точка после последнего продавца_ид - это только ошибка копирования/вставки или она есть в реальном запросе? Последний из всех является основным ключом только product_id? Если да, есть ли какие-либо внешние ключи из других таблиц, возможно, указывающие на эту таблицу, или, возможно, есть триггеры, которые активируются при обновлении цены таблицы (или одного или нескольких ее столбцов). – user254948