如何创建default value是NOW的column?

恩承四季 2010-05-02 12:16:57

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字段,该如何写呢?
...全文
157 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
colerclub 2010-05-02
  • 打赏
  • 举报
回复
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`)
) ;
iihero_ 2010-05-02
  • 打赏
  • 举报
回复
[Quote=引用楼主 ssawgift 的回复:]

1、我想把time的默认值设置为NOW(),但是mysql似乎只支持常量默认值。有什么办法吗?

2、我想create trigger,每次更新的时候自动更新time字段,该如何写呢?
[/Quote]
这是一个好问题。
iihero>>:
1. 有。使用timestamp类型,而不是datetime类型。如果你用的是datetime类型,可以将列类型改成timestamp类型。mysql似乎只支持常量默认值,但有一个例外,那就是timestamp类型。详见:http://dev.mysql.com/doc/refman/5.0/en/data-type-defaults.html

2. 不用创建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: 0

mysql> select * from t_defaultdate;
+----+---------------------+
| id | col2 |
+----+---------------------+
| 2 | 2010-05-02 06:12:27 |
+----+---------------------+
1 row in set (0.00 sec)

mysql>
恩承四季 2010-05-02
  • 打赏
  • 举报
回复
大家假期也很勤奋啊。。。谢谢。看来mysql的timestamp就是日期,和SQL Server中的不一样。而且mysql的语法很怪。。。开源的都这样。
feixianxxx 2010-05-02
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 iihero 的回复:]

引用楼主 ssawgift 的回复:

1、我想把time的默认值设置为NOW(),但是mysql似乎只支持常量默认值。有什么办法吗?

2、我想create trigger,每次更新的时候自动更新time字段,该如何写呢?

这是一个好问题。
iihero>>:
1. 有。使用timestamp类型,而不是datetime类型。如果你用的是datetime类型,可以将列类型改成……
[/Quote]
xuexi

56,679

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧