第date
列为timestamp
-默认值-CURRENT_TIMESTAMP
我之所以选择此选项,是因为希望将inserting
上的当前日期时间作为新行。
但是每次更新另一列时都会更改。
是否只有在插入新行而不是更新其他列时才保留current_timestamp
?
答案 0 :(得分:2)
TIMESTAMP
列在每次更新时自动更新。 DATETIME
列没有。
您要
your_column DATETIME DEFAULT CURRENT_TIMESTAMP
这使您可以像插入任何列一样在插入时指定默认值,但是由于它不再是TIMESTAMP
,因此以后每次UPDATE
都不会继续更新自身。
答案 1 :(得分:1)
当该行中任何其他列的值从其当前值更改时,自动更新的列将自动更新为当前时间戳。如果将所有其他列设置为其当前值,则自动更新的列将保持不变。为防止自动更新的列在其他列更改时更新,请将其显式设置为当前值。要在其他列不变的情况下更新自动更新的列,请将其显式设置为应具有的值(例如,将其设置为CURRENT_TIMESTAMP)。
因此,您要避免my_date_col
列在UPDATE时自动更新,您想显式地保留其值,例如:
UPDATE my_table SET my_col1 = 'foo', my_col2 = 'bar', my_date_col = my_date_col
WHERE ...
答案 2 :(得分:0)
跑步时
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
的{{1}}字段上。检查表是否运行
Extra
该列上最常见的情况,例如GMB,已自动更新。
现在,为了避免出现类似的情况,您应该显式定义该列的默认值。
SHOW CREATE TABLE `moufa`;
或者不是删除并重新创建表
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`)
);