MySQL 中,默認值時間函數

MySQL 中,默認值無法使用函數
也就是你無法 設置某一列,默認值是 NOW ()  這樣的處理

假如需要 某列的默認值爲 當前數據庫時間,那麼可以使用 TIMESTAMP 數據類型。插入的時候,忽略該列 即可。

dt TIMESTAMP 
等價於
dt TIMESTAMP  default CURRENT_TIMESTAMP  ON UPDATE CURRENT_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)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章