既然楼主已经解决了, 我就顺便粘贴点 测试的 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)
看看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就够用了
不要设置默认值,然后在需要的时候传进去就OK啦,