数据库
首页 > 数据库> > Mysql – 尝试更新时间戳列时.它无法更新

Mysql – 尝试更新时间戳列时.它无法更新

作者:互联网

我想我可能在mysql中遇到过一个bug,或者只是我做错了.

过去四个月我一直在使用相同的特定查询,就在今天它以某种方式停止工作.我看不出问题.

我正在mysql控制台中执行这些查询,它工作得很好,并且该字段正在更新.但是当PHP执行这些查询时,它会失败.

将记录插入表(带有两个时间戳字段)后,我正在尝试更新特定的时间戳列.

但不幸的是它无法更新专栏.

查询进展顺利(没有错误),但时间戳列中的值仍然保持不变.这很奇怪,因为当我将初始列值保留为NULL时,更新查询会成功.

列 :

START_DATETIME, END_DATETIME - are "timestamp" type.

插入:

INSERT INTO TABLE1(START_DATETIME, END_DATETIME, RESPONSE) 
VALUES(NOW(), NOW(), 'STARTED')

插入成功完成. id是123

更新查询与任何其他查询一样正常:

UPDATE TABLE1 
SET END_DATETIME = NOW(), RESPONSE='ENDED'
WHERE ID = 123

更新失败,END_DATETIME没有获得NOW()值.

可以用这个转载:

CREATE TABLE TABLE1 
(
    id int auto_increment, 
    start_datetime timestamp, 
    end_datetime timestamp, 
    response varchar(100), 

    primary key(id)
);

解决方法:

您可能已将第一个时间戳列(START_DATETIME列)定义为自动插入并使用CURRENT_TIMESTAMP值自动更新(与NOW()相同.

请注意,如果您没有明确说明CREATE TABLE脚本中有关TIMESTAMP列的任何内容,那么它们中的第一个默认情况下会获得此行为/属性.阅读有关此Automatic Initialization and Updating for TIMESTAMP的MySQL文档,其中指出:

  • With neither DEFAULT CURRENT_TIMESTAMP nor ON UPDATE CURRENT_TIMESTAMP, it is the same as specifying both DEFAULT CURRENT_TIMESTAMP and ON UPDATE CURRENT_TIMESTAMP.

所以,如果你做一个SHOW CREATE TABLE tableName,你会有这样的事情:

CREATE TABLE table1
( ...
, START_DATETIME TIMESTAMP NOT NULL 
                   DEFAULT CURRENT_TIMESTAMP
                   ON UPDATE CURRENT_TIMESTAMP
, ...
) ;

如果您不希望出现此行为,则应将列定义更改为不自动更新:

ALTER TABLE table1
  MODIFY COLUMN  
    START_DATETIME TIMESTAMP NOT NULL
                     DEFAULT CURRENT_TIMESTAMP ;

标签:mysql,insert-update
来源: https://codeday.me/bug/20190530/1182632.html