#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. Хорошая уловка, но эта опечатка связана с тем, что я изменяю фактический запрос для защиты данных моего клиента. Я не хочу публиковать их схемы для всеобщего обозрения.