mysqlTIMESTAMP不能为NULL
⼀般建表时候,创建时间⽤datetime,更新时间⽤timestamp。这是⾮常重要的。
我测试了⼀下,如果你的表中有两个timestamp字段,只要你更新任何⾮timestamp字段的值,则第⼀个timestamp列会更新成当前时间,⽽第⼆⼈timestamp列的值不变。————————————————————————-
MySQL5⽇期类型DATETIME和TIMESTAMP 相关问题详解
MySQL5的⽇期类型有三种:DATETIME、DATE和TIMESTAMP,除了DATE⽤来表⽰⼀个不带时分秒的是⽇期,另外两个都带时分秒。TIMESTAMP还可以精确到毫秒。
其次还有个共性,就是他们的格式“不严格”,很⾃由,⼀般你认为对的格式都可以正确插⼊到数据库中。
这⾥主要解决带时分秒⽇期的⼀些常见问题。
⼀、IMESTAMP
1、TIMESTAMP列必须有默认值,默认值可以为“0000-00-0000:00:00”,但不能为null。
2、TIMESTAMP列不可以设置值,只能由数据库⾃动去修改。
3、⼀个表可以存在多个TIMESTAMP列,但只有⼀个列会根据数据更新⽽改变为数据库系统当前值。因此,⼀个表中有多个TIMESTAMP 列是没有意义,实际上⼀个表只设定⼀个TIMESTAMP列。
4、TIMESTAMP列的默认值是CURRENT_TIMESTAMP常量值。当纪录数据发⽣变化的时候,TIMESTAMP列会⾃动将其值设定为CURRENT_TIMESTAMP。
5、TIMESTAMP列创建后的格式是:
`a` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
这个语句含义,a字段的默认值是CURRENT_TIMESTAMP,当纪录更新时候,⾃动将a字段的值设置为 CURRENT_TIMESTAMP。
6、另外,下⾯的定义从语法⾓度是对的,但是没有意义,因为该字段的值不可更改,永远只能为默认值。
`b` timestamp NOT NULL DEFAULT ‘0000-00-0000:00:00′,
⼆、DATETIME
1、DATETIME列可以设置为多个,默认可为null,可以⼿动设置其值。
2、DATETIME列不可设定默认值,这是很多⼈煞费苦⼼研究的成果,呵呵!
3、DATETIME列可以变相的设定默认值,⽐如通过触发器、或者在插⼊数据时候,将DATETIME字段值设置为now(),这样可以做到了,尤其是后者,在程序开发中常常⽤到。
⼀般建表时候,创建时间⽤datetime,更新时间⽤timestamp。
CREATE TABLE user (
id bigint(20) NOT NULL AUTO_INCREMENT,
name varchar(20) CHARACTER SET gbk NOT NULL,
sex tinyint(1) DEFAULT ‘1′,
state smallint(2) DEFAULT ‘1′,
createtime datetime NOT NULL,
updatetime timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (id)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=latin1
三、⽇期最⼤值范围的问题
⽇期最⼤范围的问题不是绝对的,很多⼈制定⼀个说不能查过20XX年,这是扯蛋,根本没这回事。⽇期的范围等问题与MySQL的运⾏模式有关。当然这个范围很宽⼴,⾜够祖宗⼗⼋代⽤了,不⽤担⼼这问题了。相反,要注意的问题是,编程语⾔对⽇期范围的限制,不同的语⾔,有不同的限制,这⾥不做讨论了。
四、⽇期格式转换
1、字符串转⽇期
select STR_TO_DATE(‘2010-03-0316:41:16′, ‘%Y-%m-%d %H:%i:%s’)mysql下载不了什么原因
2、⽇期转字符串
select DATE_FORMAT(‘2010-03-0316:41:16′, ‘%Y-%m-%d %H:%i:%s’)
五、⽇期的中年⽉⽇时分秒星期⽉份等获取⽅法
select TIMESTAMP(‘2010-03-0316:41:16′);
select DATE(‘2010-03-0316:41:16′);
select YEAR(‘2010-03-0316:41:16′);
select MONTH(‘2010-03-0316:41:16′);
select DAY(‘2010-03-0316:41:16′);
select TIME(‘2010-03-0316:41:16′);
select CURTIME();
select CURDATE();
select CURRENT_DATE;
select CURRENT_TIME;
select CURRENT_TIMESTAMP;
⽅式很多,这⾥简单列举⼀⼆。
六、⽇期的算术运算
相关的函数很多很多,⽤法也很简单,⼀看就会,建议查看MySQL参考⼿册。
mysql> SELECT DATE_ADD(‘1999-01-01′, INTERVAL 1 DAY);
-> ‘1999-01-02′
mysql> SELECT DATE_ADD(‘1999-01-01′, INTERVAL 1 HOUR);
-> ‘1999-01-0101:00:00′
mysql> SELECT DATE_ADD(‘1998-01-30′, INTERVAL 1 MONTH);
-> ‘1998-02-28′
七、⽇期的⼤⼩⽐较
拿着⽇当数字,拿着字符串当⽇期,呵呵,很简单的。and update_time > ‘2010-03-0216:48:41′
and update_time <= ‘2010-03-0316:51:58′
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论