2009-09-30 82 views

回答

1

您可以用触发器做:

DELIMITER $$ 
CREATE TRIGGER `before_update` BEFORE UPDATE ON `table_name` FOR EACH ROW BEGIN 
SET NEW.update_date = NOW(); 
END; 
$$ 

CREATE TRIGGER `before_insert` BEFORE INSERT ON `table_name` FOR EACH ROW BEGIN 
SET NEW.update_date = NOW(); 
END; 
$$ 

DELIMITER ; 
8

你可以时间戳来代替,并设置ON UPDATE CURRENT_TIMESTAMP NOT NULL,例如:

CREATE TABLE example (
lastUpdate TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL 
); 
+0

差不多,看我的其他答案。 – ripper234 2009-09-30 15:35:41

+0

我已经做了,并投票给你。我也试着留下'Well spotted'的评论,但是它没有超过所需的最少15个字符。 – Anax 2009-09-30 15:58:20

+0

我讨厌15个字符的规则。 – ripper234 2009-09-30 15:59:48

2

像ANAX表示,采用TIMESTAMP代替DATETIME会给你一个使用当前时间的列,而不是等待提供的日期/时间。

你有很多的options with TIMESTAMP,这两个是最重要的有:

  • 有使用它时,该行创建当前时间(NOW()
  • 有修改它的列中当前行的修改时间。

如果不设置任何选项,就像这样:

CREATE TABLE stuff (ts TIMESTAMP); 

它将把在当前时间创建和变化上修改该列。

所以,如果你想有一个列在创建时,只显示,你可以使用:

CREATE TABLE stuff (ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP); 

既然你没有指定ON UPDATE条款,如果该行被更新,它不会做任何事情。

如果你是疯了,像我一样,你会希望同时,与去:

CREATE TABLE stuff (create_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP, 
        mod_date TIMESTAMP 
        ); 

,因为我还没有写这一点,然而,这最后一个是相当于写出:

CREATE TABLE stuff (create_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP, 
        mod_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP 
             ON UPDATE CURRENT_TIMESTAMP 
        ); 
+0

第二个最后的声明真的帮助我。非常感谢你。 – twnaing 2013-01-18 19:16:10

4

Anax已经接近,但错过了默认值。

CREATE TABLE example (
lastUpdate TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL 
) 
相关问题