Оператор SQL: обновление при вставке ключа не работает должным образом, если в полях для вставки не указан первичный ключ

0

Здравствуйте! Я использую 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.

Что я должен делать?

Например, может быть, мне нужно явно указать первичный ключ? Я хотел бы работать с этим первичным автоинкрементным ключом.

Для рекомендации Гордона я добавляю случай образца вы можете увидеть на следующем изображении Строки вывода

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

Спасибо за ваши ответы,

Привет!

  • 1
    Пожалуйста, предоставьте образцы данных, которые иллюстрируют проблему, которую вы хотите решить.
Теги:
insert-into

1 ответ

0

Если вы хотите предотвратить дублирование столбцов, создайте для них уникальный индекс или ограничение. Например:

create unique index unq_table_7 on table(a, b, c, d, e, f, g);

Это гарантирует, что 7 столбцов - в комбинации - являются уникальными.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню