1. 程式人生 > >有關MYSQL建庫時有關時間戳欄位的問題

有關MYSQL建庫時有關時間戳欄位的問題

由於要做一個專案的後臺,需要設計數模並建庫,用的是PowerDesigner,資料庫用的是MySQL5.5 ,在建物理模型的時候,用到了timestamp這個型別的欄位(時間戳),一個是建立時間,一個是修改時間,建庫成功後發現一個問題,怎麼讓CREATED欄位在建立時生成時間戳,而ALTER欄位在修改時自動生成時間戳呢?上網一查,果然也有一些小夥伴和我一樣遇到了這樣的問題,下面是解決辦法:

MySQL 5.7之前的版本,如果直接這樣寫是會報錯的:

CREATE TABLE `test_table` (  
`id` INT( 10 ) NOT NULL,  
`create_time` TIMESTAMP
NOT NULL DEFAULT CURRENT_TIMESTAMP, `update_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ) ENGINE = INNODB;

有網友提供了這樣的解決辦法

CREATE TABLE `test_table` (  
`id` INT( 10 ) NOT NULL,  
`create_time` TIMESTAMP NOT NULL DEFAULT 0,  
`update_time` TIMESTAMP NOT NULL DEFAULT
CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ) ENGINE = INNODB;
  • 這樣寫的結果就是,修改時間在建立一條記錄的時候也會初始化(其實也沒毛病)

這時候插入和修改一條語句是這麼寫的

INSERT INTO test_table (id, create_time, update_time) VALUES (1, NULL, NULL); 
INSERT INTO test_table (id, update_time) VALUES (1, NULL);  
UPDATE test_table (id) VALUES
(2);

MySQL5.7之後可以直接這麼寫了

CREATE TABLE `test_table` (  
`id` INT( 10 ) NOT NULL,  
`create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,  
`update_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP  
) ENGINE = INNODB;

事情就這麼解決了!