mysql如何让时间属性不自动更新
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql如何让时间属性不自动更新相关的知识,希望对你有一定的参考价值。
我的数据表中有一个timestamp属性字段,默认值是current_timestamp,这里有个弊端就是每次更新如果不给这个字段传入值,那么它是null,数据库会自动更新当前的时间,由于这个时间字段我是记录以前的信息,每次更新时间都在变,那么问题就大了,我想请教知友们,我该如何设置才能使不传入时间,更新也不会改变当前的字段值?
问题解决了,找了这么久关键字总算让我不再这范围的关键字文章中找到了。
其实我上面理解错了自动更新不是因为current_timestamp的存在,后面还要加上on update current
这句是更新的关键,所以我取消了这一句在数据库中只让默认值为current_timestamp这样就不会更新了
首先是 插入 与 更新, 都会修改 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如何让时间属性不自动更新的主要内容,如果未能解决你的问题,请参考以下文章