У меня возникают некоторые проблемы с обновлением таблицы при использовании с подготовленным оператором.
Похоже, что MySQL обновляет неправильный столбец, который даже не был указан в команде обновления.
Приготовление:
drop table test1;
create table test1(
id int not null,
show_from timestamp not null,
updated_at timestamp NULL DEFAULT NULL
);
insert into test1(id, show_from, updated_at) values(1, '2018-01-11 12:10:11.19808', '2019-04-15 11:50:00.704748');
сделать это в одной партии:
UPDATE test1 SET show_from='2018-04-15 11:50:00.704748' WHERE id=1;
SELECT * FROM test1;
возвращается:
1 2018-04-15 13:50:01 2019-04-15 13:50:01
как и ожидалось.
Теперь сделайте это в одной партии:
PREPARE stmt1 FROM 'UPDATE test1 SET updated_at=? WHERE id=?';
SET @s1='2019-02-11 12:12:11.19808';
SET @s2=1;
EXECUTE stmt1 USING @s1, @s2;
DEALLOCATE PREPARE stmt1;
SELECT * FROM test1;
возвращается:
1 2019-04-15 12:54:27 2019-02-11 13:12:11
Почему MySQL обновил столбец show_from?