2016-11-17 70 views
2

當前日期我有以下結構的表:插入在插入

+----+-------------+----------------+------------+------------+ 
| id | some column | another column | inserted | edited | 
+----+-------------+----------------+------------+------------+ 
| 1 | ...   | ...   | 2014-08-15 | 2016-03-04 | 
| 2 | ...   | ...   | 2015-09-16 | 2016-10-07 | 
| 3 | ...   | ...   | 2016-10-17 | 2016-11-16 | 
+----+-------------+----------------+------------+------------+ 

當一個新條目被插入,當前日期是否應添加入列inserted。它不應該改變。
編輯條目時,應將當前日期添加到列edited中,每次編輯該條目時都應更新。

我的方法是在兩種情況下定義數據類型date並將標準值更改爲CURDATE()。相反,只是將CURDATE()作爲字符串插入。

更新 這是一個例子查詢:

CREATE TABLE `test`.`testtab` 
    ( 
    `id`    INT NOT NULL auto_increment, 
    `some column` VARCHAR(100) NULL, 
    `another column` VARCHAR(100) NULL, 
    `inserted`  VARCHAR(100) NULL DEFAULT 'CURDATE()', 
    `edited`   VARCHAR(100) NULL DEFAULT 'CURDATE()', 
    PRIMARY KEY (`id`) 
) 
engine = innodb; 

雖然,我不知道的數據類型。

+1

什麼是查詢? –

+0

「插入」的類型是什麼? –

+1

hu?!?文本/字符串''CURDATE()'是否允許插入日期數據類型列?這似乎不太可能,除非你的數據庫真的被洗淨了。我所能想到的是在你的陳述中刪除curdate()周圍的抽動。並驗證插入和編輯都是「日期」數據類型。 – xQbert

回答

2

根據您的需求,這會爲你工作:

CREATE TABLE `test`.`testtab` 
    ( 
    `id`    INT NOT NULL auto_increment, 
    `some column` VARCHAR(100) NULL, 
    `another column` VARCHAR(100) NULL, 
    `inserted`  DATETIME DEFAULT CURRENT_TIMESTAMP, 
    `edited`   DATETIME ON UPDATE CURRENT_TIMESTAMP, 
    PRIMARY KEY (`id`) 
) 
engine = innodb; 

然後同時處理只提取日期部分:

DATE_FORMAT(datetime, '%Y-%m-%d') 

您可以使用觸發器作爲一種變通方法來設置日期時間字段NOW()適用於新插頁:

CREATE TRIGGER `triggername` BEFORE INSERT ON `tablename` 
FOR EACH ROW 
SET NEW.datetimefield = NOW() 

它應該也適用於更新

+0

有沒有機會,只是存儲日期,沒有時間? – user1170330

+0

DEFAULT子句指定列的默認值。有一個例外,默認值必須是常數;它不能是一個函數或表達式。這意味着,例如,您不能將日期列的默認值設置爲NOW()或CURRENT_DATE等函數的值。例外是您可以指定CURRENT_TIMESTAMP作爲TIMESTAMP列的默認值 –

3

嘗試修改您的架構如下圖所示

`inserted` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, 
`edited` timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 

希望這會幫助你的。

+0

有沒有機會,只是顯示日期,沒有時間? – user1170330

+0

當你抓取時,你可以將時間修剪爲'日期(插入)'和'日期(編輯)'。 – Viki888

+0

使用'DATE'字段而不是'TIMESTAMP' –

-1

1)我們需要查看當前查詢,瞭解如何插入新行。

2)插入行後,您可以將列edited更改爲「在phpMyAdmin中更新CURRENT TIMESTAMP」。爲此,請轉到您的表格,單擊表格上方的「結構」選項卡,找到「已編輯」列並單擊該列上的「更改」。然後,在「屬性」設置下,您應該可以選擇「更新CURRENT TIMESTAMP」。然後保存更改並進行測試。

0

不幸的是,您不能將MySQL DATE字段默認爲curdate()。以下選項可用於mysql:

  1. 從MySQL 5.6.5開始,您可以使用具有動態默認值的DATETIME類型。對於例如插入DATETIME DEFAULT CURRENT_TIMESTAMP

  2. 在5.6.5 TIMESTAMP之前(每個表只有一個自動更新可以退出)會在字段被修改時更新字段。

參考: http://dev.mysql.com/doc/refman/5.7/en/timestamp-initialization.html