有關MYSQL建庫時有關時間戳欄位的問題
阿新 • • 發佈:2019-02-06
由於要做一個專案的後臺,需要設計數模並建庫,用的是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;