mysql如何让时间属性不自动更新

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql如何让时间属性不自动更新相关的知识,希望对你有一定的参考价值。

我的数据表中有一个timestamp属性字段,默认值是current_timestamp,这里有个弊端就是每次更新如果不给这个字段传入值,那么它是null,数据库会自动更新当前的时间,由于这个时间字段我是记录以前的信息,每次更新时间都在变,那么问题就大了,我想请教知友们,我该如何设置才能使不传入时间,更新也不会改变当前的字段值?
问题解决了,找了这么久关键字总算让我不再这范围的关键字文章中找到了。
其实我上面理解错了自动更新不是因为current_timestamp的存在,后面还要加上on update current
这句是更新的关键,所以我取消了这一句在数据库中只让默认值为current_timestamp这样就不会更新了

既然楼主已经解决了, 我就顺便粘贴点 测试的 sql 代码上来吧

首先是 插入 与 更新, 都会修改 TIMESTAMP 的情况:

create table testB (
id int PRIMARY KEY,
val varchar(10),
dt TIMESTAMP
);

INSERT INTO testB(id, val) VALUES(1, 'A');
INSERT INTO testB(id, val) VALUES(2, 'B');

SELECT
*
FROM
testB;

+----+------+---------------------+
| id | val | dt |
+----+------+---------------------+
| 1 | A | 2013-03-21 14:24:20 |
| 2 | B | 2013-03-21 14:24:21 |
+----+------+---------------------+
2 rows in set (0.00 sec)

UPDATE
testB
SET
val = 'C'
WHERE
id = 1;

SELECT
*
FROM
testB;

+----+------+---------------------+
| id | val | dt |
+----+------+---------------------+
| 1 | C | 2013-03-21 14:28:02 |
| 2 | B | 2013-03-21 14:24:21 |
+----+------+---------------------+
2 rows in set (0.00 sec)

然后是 仅仅插入时设置, 修改时不更新的情况

假如仅仅需要 插入时记录时间, 更新的时候不需要, 那么需要修改表定义方式:
TIMESTAMP not null default CURRENT_TIMESTAMP

create table testC (
id int PRIMARY KEY,
val varchar(10),
dt TIMESTAMP not null default CURRENT_TIMESTAMP
);

INSERT INTO testC(id, val) VALUES(1, 'A');
INSERT INTO testC(id, val) VALUES(2, 'B');

SELECT
*
FROM
testC;

+----+------+---------------------+
| id | val | dt |
+----+------+---------------------+
| 1 | A | 2013-03-21 14:35:12 |
| 2 | B | 2013-03-21 14:35:13 |
+----+------+---------------------+
2 rows in set (0.00 sec)

UPDATE
testC
SET
val = 'CC'
WHERE
id = 1;

SELECT
*
FROM
testC;

+----+------+---------------------+
| id | val | dt |
+----+------+---------------------+
| 1 | CC | 2013-03-21 14:35:12 |
| 2 | B | 2013-03-21 14:35:13 |
+----+------+---------------------+
2 rows in set (0.00 sec)
参考技术A 看看mysql文档里面关于timestamp的说明会清楚一些
这块是容易弄错,建表的第一列timestamp属性的字段如果不显示给默认值,都会自动更新.

http://dev.mysql.com/doc/refman/5.1/zh/column-types.html#datetime

11.3.1.1. 自MySQL 4.1以来的TIMESTAMP属性

我觉得一般用date就够用了
参考技术B 不要设置默认值,然后在需要的时候传进去就OK啦,追问

谢谢

mysql的更新问题

字段name具有唯一属性, 如果name=woniu已经存在, 使用插入语句insert into mytable(age, sex, name) values('20', '0', 'woniu'), 怎样让mysql能自动更新name为woniu的记录而不是插入, 该使用什么命令?

这个,建议在插入前查询一下,如果有,则更新,如果没有,则插入。

如果坚持如此做的话,可以试试触发器(似乎也不行)

你再查查有没有可更新视图的概念。追问

没有某种机制可以让mysql检测到如果具有唯一属性的name字段重复的话, 将插入操作自动转为更新操作吗, 除了触发器?
在网上找了一个ON DUPLICATE KEY UPDATE命令语句, 不是太明白, 不知道和这个有没有关系?

追答

这个不懂,你可以试试

参考技术A 你是不是要把这个表里所有的name都改成woniu啊

如果是的话

update mytable set name='woniu'
参考技术B 知道update语句吗?干嘛非要insert

以上是关于mysql如何让时间属性不自动更新的主要内容,如果未能解决你的问题,请参考以下文章

mysql 怎么将时间自动更新自动加上72小时

核心数据自动更新查询

MySQL - 如何自动管理多个数据库的更新?

怎么让Eclipse maven不自动更新

怎么让Eclipse maven不自动更新

mysql timestamp自动更新时间问题