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

2025-03-02 00:47:42
推荐回答(3个)
回答1:

既然楼主已经解决了, 我就顺便粘贴点 测试的 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)

回答2:

看看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就够用了

回答3:

不要设置默认值,然后在需要的时候传进去就OK啦,