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
norON UPDATE CURRENT_TIMESTAMP
, it is the same as specifying bothDEFAULT CURRENT_TIMESTAMP
andON 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