create table test (id int, changed timestamp);
insert into test (id, changed) values (1, now());
insert into test (id, changed) values (2, now());
insert into test (id, changed) values (3, now());
select * from test;
+----+---------------------+
| id | changed |
+----+---------------------+
| 1 | 2015-07-14 14:58:00 | <-- correct
| 2 | 2015-07-14 14:58:02 |
| 3 | 2015-07-14 14:58:04 |
+----+---------------------+
update test set id = 5 where id = 1; -- nothing with 'changed' specified!
select * from test;
+----+---------------------+
| id | changed |
+----+---------------------+
| 5 | 2015-07-14 15:00:00 | <-- wrong! why?
| 2 | 2015-07-14 14:58:02 |
| 3 | 2015-07-14 14:58:04 |
+----+---------------------+
看到列已更改,我想设置 id 但未更改。数据库第一次对我执行此操作。
MySQL 为什么要这样做?
我怎样才能阻止这种行为?
最佳答案
默认情况下,TIMESTAMP
列将设置为 CURRENT_TIMESTAMP
,并且每当您更新行时也会使用该列。
当您使用以下方式创建表格时:
CREATE TABLE test (
id int,
changed TIMESTAMP
);
它将与此相同:
CREATE TABLE test (
id int,
changed TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
对于常量,默认值为给定值。在这种情况下,该列根本没有自动属性:
CREATE TABLE test (
id int,
changed TIMESTAMP 0
);
关于MySQL 在更新时自行更改 'changed' 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31418208/