小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

mysql TIMESTAMP 不能為NULL

 館天下ccf 2018-01-04

一般建表時(shí)候,創(chuàng)建時(shí)間用datetime,更新時(shí)間用timestamp。這是非常重要的。


我測(cè)試了一下,如果你的表中有兩個(gè)timestamp字段,只要你更新任何非timestamp字段的值,則第一個(gè)timestamp列會(huì)更新成當(dāng)前時(shí)間,而第二人timestamp列的值不變。


————————————————————————-
MySQL5日期類(lèi)型DATETIME和TIMESTAMP 相關(guān)問(wèn)題詳解

MySQL5的日期類(lèi)型有三種:DATETIME、DATE和TIMESTAMP,除了DATE用來(lái)表示一個(gè)不帶時(shí)分秒的是日期,另外兩個(gè)都帶時(shí)分秒。TIMESTAMP還可以精確到毫秒。

其次還有個(gè)共性,就是他們的格式“不嚴(yán)格”,很自由,一般你認(rèn)為對(duì)的格式都可以正確插入到數(shù)據(jù)庫(kù)中。

這里主要解決帶時(shí)分秒日期的一些常見(jiàn)問(wèn)題。

一、IMESTAMP

1、TIMESTAMP列必須有默認(rèn)值,默認(rèn)值可以為“0000-00-00 00:00:00”,但不能為null。
2、TIMESTAMP列不可以設(shè)置值,只能由數(shù)據(jù)庫(kù)自動(dòng)去修改。
3、一個(gè)表可以存在多個(gè)TIMESTAMP列,但只有一個(gè)列會(huì)根據(jù)數(shù)據(jù)更新而改變?yōu)閿?shù)據(jù)庫(kù)系統(tǒng)當(dāng)前值。因此,一個(gè)表中有多個(gè)TIMESTAMP 列是沒(méi)有意義,實(shí)際上一個(gè)表只設(shè)定一個(gè)TIMESTAMP列。
4、TIMESTAMP列的默認(rèn)值是CURRENT_TIMESTAMP常量值。當(dāng)紀(jì)錄數(shù)據(jù)發(fā)生變化的時(shí)候,TIMESTAMP列會(huì)自動(dòng)將其值設(shè)定為CURRENT_TIMESTAMP。
5、TIMESTAMP列創(chuàng)建后的格式是:
`a` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
這個(gè)語(yǔ)句含義,a字段的默認(rèn)值是CURRENT_TIMESTAMP,當(dāng)紀(jì)錄更新時(shí)候,自動(dòng)將a字段的值設(shè)置為 CURRENT_TIMESTAMP。
6、另外,下面的定義從語(yǔ)法角度是對(duì)的,但是沒(méi)有意義,因?yàn)樵撟侄蔚闹挡豢筛?,永遠(yuǎn)只能為默認(rèn)值。
`b` timestamp NOT NULL DEFAULT ‘0000-00-00 00:00:00′,

二、DATETIME

1、DATETIME列可以設(shè)置為多個(gè),默認(rèn)可為null,可以手動(dòng)設(shè)置其值。
2、DATETIME列不可設(shè)定默認(rèn)值,這是很多人煞費(fèi)苦心研究的成果,呵呵!
3、DATETIME列可以變相的設(shè)定默認(rèn)值,比如通過(guò)觸發(fā)器、或者在插入數(shù)據(jù)時(shí)候,將DATETIME字段值設(shè)置為now(),這樣可以做到了,尤其是后者,在程序開(kāi)發(fā)中常常用到。

一般建表時(shí)候,創(chuàng)建時(shí)間用datetime,更新時(shí)間用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

三、日期最大值范圍的問(wèn)題

日期最大范圍的問(wèn)題不是絕對(duì)的,很多人制定一個(gè)說(shuō)不能查過(guò)20XX年,這是扯蛋,根本沒(méi)這回事。日期的范圍等問(wèn)題與MySQL的運(yùn)行模式有關(guān)。當(dāng)然這個(gè)范圍很寬廣,足夠祖宗十八代用了,不用擔(dān)心這問(wèn)題了。

相反,要注意的問(wèn)題是,編程語(yǔ)言對(duì)日期范圍的限制,不同的語(yǔ)言,有不同的限制,這里不做討論了。

四、日期格式轉(zhuǎn)換

1、字符串轉(zhuǎn)日期
select STR_TO_DATE(‘2010-03-03 16:41:16′, ‘%Y-%m-%d %H:%i:%s’)

2、日期轉(zhuǎn)字符串
select DATE_FORMAT(‘2010-03-03 16:41:16′, ‘%Y-%m-%d %H:%i:%s’)

五、日期的中年月日時(shí)分秒星期月份等獲取方法

select TIMESTAMP(‘2010-03-03 16:41:16′);

select DATE(‘2010-03-03 16:41:16′);

select YEAR(‘2010-03-03 16:41:16′);

select MONTH(‘2010-03-03 16:41:16′);

select DAY(‘2010-03-03 16:41:16′);

select TIME(‘2010-03-03 16:41:16′);

select CURTIME();

select CURDATE();

select CURRENT_DATE;

select CURRENT_TIME;

select CURRENT_TIMESTAMP;

方式很多,這里簡(jiǎn)單列舉一二。

六、日期的算術(shù)運(yùn)算

相關(guān)的函數(shù)很多很多,用法也很簡(jiǎn)單,一看就會(huì),建議查看MySQL參考手冊(cè)。
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-01 01:00:00′

mysql> SELECT DATE_ADD(‘1998-01-30′, INTERVAL 1 MONTH);

-> ‘1998-02-28′

七、日期的大小比較

拿著日當(dāng)數(shù)字,拿著字符串當(dāng)日期,呵呵,很簡(jiǎn)單的。
and update_time > ‘2010-03-02 16:48:41′
and update_time <= ‘2010-03-03 16:51:58′

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多