首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL -停止更新默认的当前时间戳列

问MySQL -停止更新默认的当前时间戳列
EN

Stack Overflow用户
提问于 2018-11-20 20:54:29
回答 2查看 463关注 0票数 1

我的数据库中有两个日期时间列:inserted和updated

代码语言:javascript
复制
inserted timestamp DEFAULT CURRENT_TIMESTAMP 
updated   timestamp -------------------------

主列是ID。

我运行SQL命令:

代码语言:javascript
复制
REPLACE INTO TABLE1 (id,name,updated) VALUES ('1','test1',NOW()) 

这是可以的:插入的列在第一次插入时获取当前时间,更新的列也被设置为当前时间,因为它是在REPLACE命令中设置的。

如果我运行第二个命令来更新名称,那么更新列将被正确更新,而且INSERTED列也将被更新。我不想那样!

代码语言:javascript
复制
REPLACE INTO TABLE1 (id,name,updated) VALUES ('1','test2',NOW()) 

如何在运行REPLACE命令后停止inserted列的自动更新?mysql数据库中插入的列应该做什么更改?我必须使用REPLACE sql或任何同义词来满足我的需要。

EN

回答 2

Stack Overflow用户

发布于 2018-11-20 20:58:05

replace将删除旧记录并插入新记录。

如果要更新现有记录,请改用update:

代码语言:javascript
复制
UPDATE TABLE1 
SET name = 'test2',
    updated = now()
where id = 1
票数 1
EN

Stack Overflow用户

发布于 2018-11-20 21:01:29

如果您希望在不使用写入SQL命令情况下更新字段。您需要像这样创建该列:

代码语言:javascript
复制
`inserted` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
`updated` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

但是这个方法适用于更新操作,而不是替换操作。

REPLACE的工作方式与INSERT完全相同,不同之处在于,如果表中的旧行与主键或唯一索引的新行具有相同的值,则会在插入新行之前删除旧行。请参阅第13.2.6节“插入语法”。

详细说明请参阅:https://dev.mysql.com/doc/refman/8.0/en/replace.html

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53393454

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档