| Bug #23561 | timestamp is automatically updated when nothing changed through INSERT...ON DUP | ||
|---|---|---|---|
| Submitted: | 23 Oct 2006 22:32 | Modified: | 7 Nov 2007 17:13 |
| Reporter: | Joseph N. | Email Updates: | |
| Status: | Duplicate | Impact on me: | |
| Category: | MySQL Server | Severity: | S3 (Non-critical) |
| Version: | 5.0.28-BK, 5.0.18-max-log | OS: | Linux (Linux, RedHat/RHEL3) |
| Assigned to: | Assigned Account | CPU Architecture: | Any |
[23 Oct 2006 22:32]
Joseph N.
[24 Oct 2006 8:34]
Valeriy Kravchuk
Thank you for a bug report. Verified just as described with 5.0.28-BK on Linux:
openxs@suse:~/dbs/5.0> bin/mysql -uroot test
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.0.28-debug Source distribution
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> CREATE TABLE `price` (
-> `assetid` int(11) NOT NULL default '0',
-> `date` date NOT NULL default '0000-00-00',
-> `open` double default NULL,
-> `high` double default NULL,
-> `low` double default NULL,
-> `close` double default NULL,
-> `volume` bigint(20) default NULL,
-> last_update TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
-> PRIMARY KEY (`assetid`,`date`)
-> ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Query OK, 0 rows affected (0.12 sec)
mysql> INSERT INTO price (assetid,date,open,high,low,close,volume) VALUES
-> (202690,'2006-05-18','334.25','334.25','334.25','334.25','1') ON DUPLICATE
-> KEY UPDATE
-> open='334.25',high='334.25',low='334.25',close='334.25',volume='1';
Query OK, 1 row affected (0.01 sec)
mysql> INSERT INTO price (assetid,date,open,high,low,close,volume) VALUES (202
690,'2006-05-18','334.25','334.25','334.25','334.25','1') ON DUPLICATE KEY UPDATE open='334.25',high='334.25',low='334.25',close='334.25',volume='1';
Query OK, 2 rows affected (0.01 sec)
mysql> select * from price\G
*************************** 1. row ***************************
assetid: 202690
date: 2006-05-18
open: 334.25
high: 334.25
low: 334.25
close: 334.25
volume: 1
last_update: 2006-10-24 10:47:35
1 row in set (0.00 sec)
mysql> select now(), version();
+---------------------+--------------+
| now() | version() |
+---------------------+--------------+
| 2006-10-24 10:47:50 | 5.0.28-debug |
+---------------------+--------------+
1 row in set (0.00 sec)
mysql> UPDATE price SET
-> open='334.25',high='334.25',low='334.25',close='334.25',volume='1' WHERE
-> assetid=202690 AND date='2006-05-18';
Query OK, 0 rows affected (0.01 sec)
Rows matched: 1 Changed: 0 Warnings: 0
mysql> select now(), version();
+---------------------+--------------+
| now() | version() |
+---------------------+--------------+
| 2006-10-24 10:48:08 | 5.0.28-debug |
+---------------------+--------------+
1 row in set (0.00 sec)
mysql> select * from price\G
*************************** 1. row ***************************
assetid: 202690
date: 2006-05-18
open: 334.25
high: 334.25
low: 334.25
close: 334.25
volume: 1
last_update: 2006-10-24 10:47:35
1 row in set (0.00 sec)
Test case:
CREATE TABLE `price` (
`assetid` int(11) NOT NULL default '0',
`date` date NOT NULL default '0000-00-00',
`open` double default NULL,
`high` double default NULL,
`low` double default NULL,
`close` double default NULL,
`volume` bigint(20) default NULL,
`last_update` TIMESTAMP DEFAULT CURRENT_TIMESTAMP
ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`assetid`,`date`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
INSERT INTO price (assetid,date,open,high,low,close,volume)
VALUES (202690,'2006-05-18','334.25','334.25','334.25','334.25','1')
ON DUPLICATE KEY UPDATE
open='334.25',high='334.25',low='334.25',close='334.25',volume='1';
SELECT now();
SELECT * FROM price;
INSERT INTO price (assetid,date,open,high,low,close,volume)
VALUES (202690,'2006-05-18','334.25','334.25','334.25','334.25','1')
ON DUPLICATE KEY UPDATE
open='334.25',high='334.25',low='334.25',close='334.25',volume='1';
SELECT now();
SELECT * FROM price;
UPDATE price
SET open='334.25',high='334.25',low='334.25',close='334.25',volume='1'
WHERE assetid=202690 AND date='2006-05-18';
SELECT now();
SELECT * FROM price;
[7 Nov 2007 17:13]
Alexey Kopytov
Most likely a duplicate of bug #19978, not reproducible on recent 5.0/5.1 trees. Note that the verifier used 5.0.28-BK whereas the fix for bug #19978 appeared only in 5.0.36.
