Open KES777 opened 8 years ago
For this query:
update site_stat set (total, "unique", visits ) = (7,7,7) where site_id = 1804 and period = cast('2016-05-06 00:00:00' as timestamp);
Mysql log shows:
160512 20:47:48 6697 Query SET sql_mode='ANSI_QUOTES'
6697 Query EXPLAIN site_stat
6697 Query SET time_zone = '+00:00'
6697 Query SET sql_mode='ANSI_QUOTES'
6697 Prepare SELECT `site_id`, `period`, `list` FROM `constructor`.`site_stat` WHERE ((`site_id` = 1804)) AND ((`period` = '2016-05-06 00:00:00')) FOR UPDATE
6697 Execute SELECT `site_id`, `period`, `list` FROM `constructor`.`site_stat` WHERE ((`site_id` = 1804)) AND ((`period` = '2016-05-06 00:00:00')) FOR UPDATE
6697 Prepare UPDATE `constructor`.`site_stat` SET `total` = ?, `unique` = ?, `visits` = ? WHERE site_id = ?
6697 Execute UPDATE `constructor`.`site_stat` SET `total` = 7, `unique` = 7, `visits` = 7 WHERE site_id = 1804
6697 Close stmt
6697 Close stmt
As you can see the expression AND ((period = '2016-05-06 00:00:00')) for UPDATE
statement is lost.
anoter test case:
update site_stat set (total, "unique", visits ) = (7,7,7) where site_id = 1804 and visits = 7;
UPDATE 16
In logs:
6697 Prepare SELECT `site_id`, `period`, `list` FROM `constructor`.`site_stat` WHERE ((`site_id` = 1804)) AND ((`visits` = 7)) FOR UPDATE
6697 Execute SELECT `site_id`, `period`, `list` FROM `constructor`.`site_stat` WHERE ((`site_id` = 1804)) AND ((`visits` = 7)) FOR UPDATE
6697 Prepare UPDATE `constructor`.`site_stat` SET `total` = ?, `unique` = ?, `visits` = ? WHERE site_id = ?
6697 Execute UPDATE `constructor`.`site_stat` SET `total` = 7, `unique` = 7, `visits` = 7 WHERE site_id = 1804
6697 Execute UPDATE `constructor`.`site_stat` SET `total` = 7, `unique` = 7, `visits` = 7 WHERE site_id = 1804
6697 Execute UPDATE `constructor`.`site_stat` SET `total` = 7, `unique` = 7, `visits` = 7 WHERE site_id = 1804
6697 Execute UPDATE `constructor`.`site_stat` SET `total` = 7, `unique` = 7, `visits` = 7 WHERE site_id = 1804
6697 Execute UPDATE `constructor`.`site_stat` SET `total` = 7, `unique` = 7, `visits` = 7 WHERE site_id = 1804
6697 Execute UPDATE `constructor`.`site_stat` SET `total` = 7, `unique` = 7, `visits` = 7 WHERE site_id = 1804
6697 Execute UPDATE `constructor`.`site_stat` SET `total` = 7, `unique` = 7, `visits` = 7 WHERE site_id = 1804
6697 Execute UPDATE `constructor`.`site_stat` SET `total` = 7, `unique` = 7, `visits` = 7 WHERE site_id = 1804
6697 Execute UPDATE `constructor`.`site_stat` SET `total` = 7, `unique` = 7, `visits` = 7 WHERE site_id = 1804
6697 Execute UPDATE `constructor`.`site_stat` SET `total` = 7, `unique` = 7, `visits` = 7 WHERE site_id = 1804
6697 Execute UPDATE `constructor`.`site_stat` SET `total` = 7, `unique` = 7, `visits` = 7 WHERE site_id = 1804
6697 Execute UPDATE `constructor`.`site_stat` SET `total` = 7, `unique` = 7, `visits` = 7 WHERE site_id = 1804
6697 Execute UPDATE `constructor`.`site_stat` SET `total` = 7, `unique` = 7, `visits` = 7 WHERE site_id = 1804
6697 Execute UPDATE `constructor`.`site_stat` SET `total` = 7, `unique` = 7, `visits` = 7 WHERE site_id = 1804
6697 Execute UPDATE `constructor`.`site_stat` SET `total` = 7, `unique` = 7, `visits` = 7 WHERE site_id = 1804
6697 Execute UPDATE `constructor`.`site_stat` SET `total` = 7, `unique` = 7, `visits` = 7 WHERE site_id = 1804
NOTICE: Query result says to us that only one row is updated!! But actually not
When query mysql directly
I replace " by `. Now it works.
Even when I remove 'unique' column from UPDATE query (to not make confusion)
It also update all 16 records