SHOW FULL COLUMNS FROM `moufa`; -- where `moufa` is the name of the table in the example
你可以看到这样的东西
+-------+-------------+-----------+------+-----+---------------------+-------------------------------+---------------------------------+---------+
| Field | Type | Collation | Null | Key | Default | Extra | Privileges | Comment |
+-------+-------------+-----------+------+-----+---------------------+-------------------------------+---------------------------------+---------+
| id | smallint(6) | NULL | NO | PRI | NULL | auto_increment | select,insert,update,references | |
| ts | timestamp | NULL | NO | | current_timestamp() | on update current_timestamp() | select,insert,update,references | |
+-------+-------------+-----------+------+-----+---------------------+-------------------------------+---------------------------------+---------+
问题出在 ts 实地考察 Extra . 检查你的table
SHOW CREATE TABLE `moufa`;
最常见的情况是gmb发布的专栏已经自动更新。 现在为了避免类似的情况,应该显式地定义列的默认值。
DROP TABLE IF EXISTS `moufa`; -- just for the example
CREATE TABLE `moufa`(
`id` SMALLINT NOT NULL AUTO_INCREMENT,
`ts` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY(`id`)
);
或是放弃并重建一张table
ALTER TABLE `moufa`
MODIFY COLUMN `ts` TIMESTAMP DEFAULT CURRENT_TIMESTAMP;
3条答案
按热度按时间nkhmeac61#
根据文件:
当行中任何其他列的值与其当前值发生更改时,自动更新的列将自动更新为当前时间戳。如果所有其他列都设置为其当前值,则自动更新的列将保持不变。要防止自动更新的列在其他列更改时更新,请显式将其设置为当前值。要更新自动更新的列,即使其他列没有更改,也要显式地将其设置为应该具有的值(例如,将其设置为current\u timestamp)。
所以你要避免
my_date_col
列以在更新时自动更新,您希望显式保留其值,如:zbq4xfa02#
当你跑的时候
你可以看到这样的东西
问题出在
ts
实地考察Extra
. 检查你的table最常见的情况是gmb发布的专栏已经自动更新。
现在为了避免类似的情况,应该显式地定义列的默认值。
或是放弃并重建一张table
6qqygrtg3#
一
TIMESTAMP
列在每次更新时自动更新。一DATETIME
列不存在。你想要:
这允许您在插入时指定一个默认值,就像为任何列指定默认值一样,但因为它不是一个
TIMESTAMP
再也不会随着每个未来不断更新自己了UPDATE
.