CREATE TABLE `settings` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `k` varchar(200) NOT NULL,
  `v` varchar(2000) DEFAULT NULL,
  `time` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `k` (`k`)
) ;
问题:1、我想把time的默认值设置为NOW(),但是mysql似乎只支持常量默认值。有什么办法吗?2、我想create trigger,每次更新的时候自动更新time字段,该如何写呢?

解决方案 »

  1.   

    这是一个好问题。
    iihero>>:
    1. 有。使用timestamp类型,而不是datetime类型。如果你用的是datetime类型,可以将列类型改成timestamp类型。mysql似乎只支持常量默认值,但有一个例外,那就是timestamp类型。详见:http://dev.mysql.com/doc/refman/5.0/en/data-type-defaults.html2. 不用创建trigger了。使用col timestamp default current_timestamp ON UPDATE CURRENT_TIMESTAMP
    后边的on update子句表示它可以在更新的时候自动更新此字段的值。示例:
    mysql> create table t_defaultdate(id int not null auto_increment primary key, col2 timestamp default current_timestamp ON UPDATE CURRENT_TIMESTAMP);
    Query OK, 0 rows affected (0.02 sec)mysql>  insert into t_defaultdate values(null, null);
    Query OK, 1 row affected (0.00 sec)mysql> select * from t_defaultdate;
    +----+---------------------+
    | id | col2                |
    +----+---------------------+
    |  1 | 2010-05-02 06:12:09 |
    +----+---------------------+
    1 row in set (0.00 sec)mysql> update t_defaultdate set id = 2;
    Query OK, 1 row affected (0.00 sec)
    Rows matched: 1  Changed: 1  Warnings: 0mysql> select * from t_defaultdate;
    +----+---------------------+
    | id | col2                |
    +----+---------------------+
    |  2 | 2010-05-02 06:12:27 |
    +----+---------------------+
    1 row in set (0.00 sec)mysql>
      

  2.   

    CREATE TABLE `settings` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `k` varchar(200) NOT NULL,
      `v` varchar(2000) DEFAULT NULL,
      `time` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
      PRIMARY KEY (`id`),
      UNIQUE KEY `k` (`k`)
    ) ;
      

  3.   

    大家假期也很勤奋啊谢谢。看来mysql的timestamp就是日期,和SQL Server中的不一样。而且mysql的语法很怪开源的都这样。