仅在插入新行时设置当前时间戳

q1qsirdb  于 2021-06-15  发布在  Mysql
关注(0)|答案(3)|浏览(340)

datetimestamp -默认值- CURRENT_TIMESTAMP 我选择这个是因为我想要一个当前的日期时间 inserting 新的一排。
但每次更新另一列时都会更改。
有没有办法保持 current_timestamp 只插入新行而不更新其他列?

nkhmeac6

nkhmeac61#

根据文件:
当行中任何其他列的值与其当前值发生更改时,自动更新的列将自动更新为当前时间戳。如果所有其他列都设置为其当前值,则自动更新的列将保持不变。要防止自动更新的列在其他列更改时更新,请显式将其设置为当前值。要更新自动更新的列,即使其他列没有更改,也要显式地将其设置为应该具有的值(例如,将其设置为current\u timestamp)。
所以你要避免 my_date_col 列以在更新时自动更新,您希望显式保留其值,如:

UPDATE my_table SET my_col1 = 'foo', my_col2 = 'bar', my_date_col = my_date_col
WHERE ...
zbq4xfa0

zbq4xfa02#

当你跑的时候

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;
6qqygrtg

6qqygrtg3#

TIMESTAMP 列在每次更新时自动更新。一 DATETIME 列不存在。
你想要:

your_column DATETIME DEFAULT CURRENT_TIMESTAMP

这允许您在插入时指定一个默认值,就像为任何列指定默认值一样,但因为它不是一个 TIMESTAMP 再也不会随着每个未来不断更新自己了 UPDATE .

相关问题