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

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

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

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

По рекомендации Гордона я добавляю образец корпуса, который вы можете увидеть на следующем изображении. Вывод строк

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

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

Пожалуйста, предоставьте пример данных, который иллюстрирует проблему, которую вы хотите решить.

Gordon Linoff 06.02.2019 04:04
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
1
35
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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

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

Другие вопросы по теме