更新更改MYSQL Tem表中的错误列

更新更改MYSQL Tem表中的错误列,mysql,sql-update,Mysql,Sql Update,我有一张临时桌 CREATE TEMPORARY TABLE `tmp_horario` ( `horas_reales` decimal(7,6) unsigned DEFAULT NULL, `sede` varchar(3) DEFAULT NULL, `periodo` varchar(6) DEFAULT NULL, `crn` int(10) unsigned DEFAULT '0', `materia` varchar(4) DEFAULT NULL, `c

我有一张临时桌

CREATE TEMPORARY TABLE `tmp_horario` (
  `horas_reales` decimal(7,6) unsigned DEFAULT NULL,
  `sede` varchar(3) DEFAULT NULL,
  `periodo` varchar(6) DEFAULT NULL,
  `crn` int(10) unsigned DEFAULT '0',
  `materia` varchar(4) DEFAULT NULL,
  `curso` varchar(5) DEFAULT NULL,
  `titulo` varchar(100) DEFAULT NULL,
  `estatus` varchar(1) DEFAULT NULL,
  `seccion` varchar(3) DEFAULT NULL,
  `nivel` varchar(2) DEFAULT NULL,
  `tipo` varchar(3) DEFAULT NULL,
  `sesion` varchar(2) DEFAULT NULL,
  `horas_clase` decimal(9,3) unsigned DEFAULT NULL,
  `horas_totales` decimal(9,3) unsigned DEFAULT NULL,
  `horas_pago` decimal(9,3) unsigned DEFAULT NULL,
  `horas_contacto` decimal(9,3) unsigned DEFAULT NULL,
  `horas_globales` decimal(9,3) unsigned DEFAULT NULL,
  `hora_inicio` varchar(4) DEFAULT NULL,
  `hora_fin` varchar(4) DEFAULT NULL,
  `lunes` varchar(1) DEFAULT NULL,
  `martes` varchar(1) DEFAULT NULL,
  `miercoles` varchar(1) DEFAULT NULL,
  `jueves` varchar(1) DEFAULT NULL,
  `viernes` varchar(1) DEFAULT NULL,
  `sabado` varchar(1) DEFAULT NULL,
  `no_programado` tinyint(3) unsigned DEFAULT NULL,
  KEY `k_sede` (`sede`),
  KEY `k_crn` (`crn`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
我用这样的选择填充记录

select 
s.ssbsect_camp_code sede
, s.ssbsect_term_code periodo
, s.ssbsect_crn crn
...
,0 horas_reales -- This value is filled later
, m.ssrmeet_begin_time hora_inicio
, m.ssrmeet_end_time hora_fin
FROM a table with a lot of joins and complex conditions
一切都好。 但是在下一步中,我用这个填充计算列

 update tmp_horario h
set h.horas_reales = if(
    h.horas_contacto / h.horas_globales * h.horas_pago > h.horas_contacto
    , h.horas_contacto
    , h.horas_contacto / h.horas_globales * h.horas_pago);
正如您所看到的,只有列horas_reales被设置,但不知何故,相邻列“horas_inicio”被更改为,即使没有被设置或添加到更新中

这是更新前后的一行,不需要的列(next)的值丢失

horas_reales|hora_inicio | hora_fin
0           |1100        | 1156
to
1           |(empty)     | 1156
如果我不进行更新,问题就会消失(需要不可能) 或者,如果我从反创建表中删除了“filler”(填充符),
0 horas\u reales
(可能我只是将其用作以后填充的占位符)


所以问题是为什么会发生这种情况,是一个bug还是我做错了什么?

随机调试提示:尝试将所有十进制类型设置为双精度,看看会发生什么。@barrycarter有趣的是,这解决了手头的问题,问题仍然是为什么会发生这种情况,是bug还是功能?。可能是bug,您应该创建一个最小的示例和报告。您试图使用varchars、decimal和tinyint来节省空间,我认为您在某种程度上混淆了MySQL与位/字节边界。不知何故,一列正在“泄漏”到另一列(胡乱猜测)。