Здравствуйте! Я использую SQL-оператор INSERT ON DUPLICATE KEY UPDATE для обновления своей базы данных.
Все работало нормально, так как я всегда вставлял уникальный идентификатор, подобный этому:
INSERT INTO devices(uniqueId,name)
VALUES (4,'Printer')
ON DUPLICATE KEY UPDATE name = 'Central Printer';
Но сейчас мне нужно вставить элементы, но я не вставляю уникальный идентификатор, я только вставляю или обновляю значения следующим образом:
INSERT INTO table (a,b,c,d,e,f,g)
VALUES (2,3,4,5,6,7,8)
ON DUPLICATE KEY
UPDATE a=a, b=b, c=c, d=d, e=e, f=f, g=g;
Должен сказать, что первичный ключ автоинкремента генерируется всегда, когда я вставляю строку.
Моя проблема в том, что теперь вставленные строки дублируются, так как я не вставляю первичный ключ или уникальный идентификатор явно в оператор SQL.
Что я должен делать?
Например, может быть, мне нужно явно указать первичный ключ? Я хотел бы работать с этим первичным автоинкрементным ключом.
Для рекомендации Гордона я добавляю случай образца вы можете увидеть на следующем изображении Строки вывода
В этом случае я добавляю первые три строки, а затем снова пытаюсь обновить три первые строки с другой информацией.... Хорошо, я вижу ошибку... Нет ключа для сравнения...: $
Спасибо за ваши ответы,
Привет!
Если вы хотите предотвратить дублирование столбцов, создайте для них уникальный индекс или ограничение. Например:
create unique index unq_table_7 on table(a, b, c, d, e, f, g);
Это гарантирует, что 7 столбцов - в комбинации - являются уникальными.