Повторяющаяся запись при обновлении столбца без первичного ключа - PullRequest
0 голосов
/ 25 января 2019

У меня есть таблица indice_hora с 6 столбцами:

- date (pk)         | Composite
- agent_id (pk)     | Primary Key
- contagem          
- movimento         
- preenchimento    
- state_changes   

Я недавно добавил столбец state_changes без значения по умолчанию, поэтому сейчас я пытаюсь обновить все нулевые значения до 0.

Я пытаюсь запустить этот код:

update indice_hora
set state_changes = 0
where state_changes is null;

Но я получаю эту ошибку:

[2019-01-25 08:55:38] [23000][1062] Duplicate entry '2019-01-25 08:55:38-0' for key 'PRIMARY'

Почему я получаю эту ошибку, даже если я не обновляюськакие-либо ключевые значения?

OBS 1: в этой таблице нет строк с датой '2019-01-25 08: 55: 38-0'.
OBS 2: Эта таблица в основном обновляется триггером:

create trigger update_indice_hora_table
  after INSERT
  on indice
  for each row
  INSERT INTO indice_hora VALUES (DATE_FORMAT(NEW.data_hora_registro, '%Y-%m-%d %H:00:00'), NEW.id_agent, NEW.contagem, NEW.mobilidade, NEW.preenchimento, 0)
  ON DUPLICATE KEY UPDATE indice_hora.data            = DATE_FORMAT(NEW.data_hora_registro, '%Y-%m-%d %H:00:00'),
                          indice_hora.id_agent        = NEW.id_agent,
                          indice_hora.contagem        = ((indice_hora.contagem      + NEW.contagem)       / 2),
                          indice_hora.movimento       = ((indice_hora.movimento     + NEW.mobilidade)     / 2),
                          indice_hora.preenchimento   = ((indice_hora.preenchimento + NEW.preenchimento)  / 2);

РЕДАКТИРОВАТЬ 1: Похоже, что '2019-01-25 08: 55: 38-0' было текущим временем, когда я катался на программе.Каждый раз, когда я запускаю скрипт, дублирующаяся запись соответствует текущему времени.

1 Ответ

0 голосов
/ 25 января 2019

Отключить триггер -> Запустить команду обновления -> Включить триггер обратно.

1 Отключить триггер

ALTER TRIGGER <TRIGGER_NAME> DISABLE

2 Выполнить ваш запрос

3 EnableTrigger

ALTER TRIGGER <TRIGGER_NAME> ENABLE
...