Ошибка дублирующего ввода MySQL для непервичного ключа

#mysql #sql

#mysql #sql

Вопрос:

У меня есть таблица, определенная с помощью одного первичного ключа / ключа автоматического увеличения.

введите описание изображения здесь

Когда я вызываю следующий запрос, я получаю сообщение об ошибке.

 INSERT INTO device_sensor_reading (`we_id`, `UNIX_time`, `temp_we_id`, `reading_format_id`,`log_id`, `msg_type`, `device_position`) VALUES
(79995, 1550896918, 0, 3, 1, 0,1);
  

Ошибка: 08:43:39 вызовите sits_db. Insert Simulated Data () Код ошибки: 1062. Дублирующая запись ‘79995-1550896918’ для ключа ‘we_id_UNIX_time’ 0,063 сек

Ни we_id, ни UNIX_time не указаны как УНИКАЛЬНЫЕ в моей таблице, так почему MySQL выдает мне эту ошибку?

Комментарии:

1. Выполните SHOW CREATE TABLE device_sensor_reading — Тогда вы сможете увидеть все ключи.

2. Учитывая, что значение, сообщенное в ошибке, не является значением, которое вы (напрямую) передаете, я подозреваю, что у вас есть триггер insert в таблице, который генерирует ошибку.

3. Вероятно, у вас уникальный индекс. Проверьте таблицу создания, как предлагает Пол. больше информации здесь mysqltutorial.org/mysql-unique

4. Вы не видите проверку в UN столбце для UNIX_time и temp_w_id ?

5. @GordonLinoff Данные фактически переданы в запросе 79995, 1550896918 .

Ответ №1:

Существует комбинированный УНИКАЛЬНЫЙ КЛЮЧ. MySQL позволяет объединить два столбца, в результате чего только комбинация обоих значений является уникальной.

Комментарии:

1. Да, вы правы. MySQL workbench не показал эту уникальную связь ключей. Мне пришлось вызвать ‘SHOW CREATE TABLE device_sensor_reading’, чтобы увидеть, что существует уникальная ключевая связь.

2. В вашем сообщении об ошибке уже говорилось, что существует комбинированный ключ: key 'we_id_UNIX_time' и entry '79995-1550896918'

3. ДА. Я знаю, что это произошло. Но пользовательский интерфейс не сообщил мне об этом, поэтому я был в замешательстве. Фактически пользовательский интерфейс показал, что ни UNIX_time, ни we_id не обязательно должны быть уникальными. Только после того, как я вызвал приведенный выше запрос, проблема стала ясна. Усвоенный урок: MySQL workbench не показывает всего, что мне нужно

Ответ №2:

В вашей таблице, которую вы указали w_id , temp_w_id в своем запросе, есть we_id и temp_we_id , теперь проверьте, есть ли у вас какое-либо значение с этой записью в двух полях. Теперь то же самое с log_id … Возможно, уникальное поле повторяется

Комментарии:

1. Хорошая уловка, но эта опечатка связана с тем, что я изменяю фактический запрос для защиты данных моего клиента. Я не хочу публиковать их схемы для всеобщего обозрения.