非主键列更新时重复输入

时间:2019-01-25 11:23:50

标签: mysql sql hibernate spring-boot spring-data-jpa

我有一个名为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 :(得分:0)

禁用触发器->运行更新命令->启用触发器。

1禁用触发器

ALTER TRIGGER <TRIGGER_NAME> DISABLE

2执行查询

3 EnableTrigger

ALTER TRIGGER <TRIGGER_NAME> ENABLE