DATETIME除破、DATE和TIMESTAMP
TIMESTAMP
- 顯示格式:YYYY-MM-DD HH:MM:SS
- 時(shí)間范圍:[ '1970-01-01 00:00:00'到'2037-12-31 23:59:59']
- IMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP: 在創(chuàng)建新記錄和修改現(xiàn)有記錄的時(shí)候都對(duì)這個(gè)數(shù)據(jù)列刷新哪雕。
- TIMESTAMP DEFAULT CURRENT_TIMESTAMP: 在創(chuàng)建新記錄的時(shí)候把這個(gè)字段設(shè)置為當(dāng)前時(shí)間茁影,但以后修改時(shí),不再刷新它确沸。
- TIMESTAMP ON UPDATE CURRENT_TIMESTAMP: 在創(chuàng)建新記錄的時(shí)候把這個(gè)字段設(shè)置為0捌锭,以后修改時(shí)刷新它。
- TIMESTAMP DEFAULT ‘yyyy-mm-dd hh:mm:ss’ ON UPDATE CURRENT_TIMESTAMP: 在創(chuàng)建新記錄的時(shí)候把這個(gè)字段設(shè)置為給定值罗捎,以后修改時(shí)刷新它观谦。
- TIMESTAMP列不為空時(shí),默認(rèn)值可以為“0000-00-00 00:00:00”桨菜,但不能為null豁状。
- 一個(gè)表可以存在多個(gè)TIMESTAMP列,但一個(gè)表只有一個(gè)TIMESTAMP類(lèi)型的字段可以在默認(rèn)值或者UPDATE部分用CURRENT_TIMESTAMP雷激,即設(shè)置為數(shù)據(jù)更新而改變?yōu)閿?shù)據(jù)庫(kù)系統(tǒng)當(dāng)前值。
- TIMESTAMP列的默認(rèn)值是CURRENT_TIMESTAMP常量值告私。當(dāng)紀(jì)錄數(shù)據(jù)發(fā)生變化的時(shí)候屎暇,TIMESTAMP列會(huì)自動(dòng)將其值設(shè)定為CURRENT_TIMESTAMP。
- TIMESTAMP列創(chuàng)建后的格式是:
ALTER TABLE course
ADD COLUMN birthday timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;
ALTER TABLE course
ADD COLUMN birthday timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP ;
ALTER TABLE course
ADD COLUMN birthday timestamp NULL AFTER cname;
DATETIME
- 顯示格式:YYYY-MM-DD HH:MM:SS
- 時(shí)間范圍:[ '1000-01-01 00:00:00'到'9999-12-31 23:59:59']
DATE
- 顯示格式:YYYY-MM-DD
- 時(shí)間范圍:['1000-01-01'到'9999-12-31']
日期格式轉(zhuǎn)換
- 字符串轉(zhuǎn)日期:
select STR_TO_DATE('2013-01-29 13:49:18', '%Y-%m-%d %H:%i:%s')
- 日期轉(zhuǎn)字符串
select DATE_FORMAT('2013-01-29 13:49:18', '%Y-%m-%d %H:%i:%s')
日期的中常用的年月日時(shí)分秒星期月份等獲取方法
- select TIMESTAMP('2013-01-29 13:50:27');
- select DATE('2013-01-29 13:50:27');
- select YEAR('2013-01-29 13:50:27');
- select MONTH(('2013-01-29 13:50:27');
- select WEEK('2013-01-29 13:50:27');
- select DAY('2013-01-29 13:50:27');
- select TIME('2013-01-29 13:50:27');
- select CURTIME();
- select CURDATE();
- select CURRENT_DATE;
- select CURRENT_TIME;
- select CURRENT_TIMESTAMP;
- select NOW()
日期的運(yùn)算
- SELECT DATE_ADD('2013-01-29 13:50:27', INTERVAL 1 DAY);
-> '2013-01-30 13:50:27' - SELECT DATE_ADD('2013-01-29 13:50:27', INTERVAL 1 HOUR);
-> '2013-01-29 14:50:27' - SELECT DATE_ADD('2013-01-29 13:50:27', INTERVAL 1 MONTH);
-> '2013-02-28 13:50:27'
int驻粟、bigint根悼、smallint 和 tinyint區(qū)別
[圖片上傳失敗...(image-db971-1531189017547)]
char,varchar,text,tinytext,mediumtext,longtext區(qū)別
- char:存儲(chǔ)定長(zhǎng)數(shù)據(jù)很方便,CHAR字段上的索引效率極高蜀撑,可以有默認(rèn)值挤巡,比如定義char(10),那么不論你存儲(chǔ)的數(shù)據(jù)是否達(dá)到了10個(gè)字節(jié)酷麦,都要占去10個(gè)字節(jié)的空間(自動(dòng)用空格填充)矿卑,且在檢索的時(shí)候后面的空格會(huì)隱藏掉,所以檢索出來(lái)的數(shù)據(jù)需要記得用strip()之類(lèi)的函數(shù)去過(guò)濾空格沃饶。
- varchar:存儲(chǔ)變長(zhǎng)數(shù)據(jù)母廷,但存儲(chǔ)效率沒(méi)有CHAR高轻黑。保存數(shù)據(jù)的時(shí)候,不進(jìn)行空格自動(dòng)填充琴昆,而且如果數(shù)據(jù)存在空格時(shí)氓鄙,當(dāng)值保存和檢索時(shí)尾部的空格仍會(huì)保留。另外业舍,varchar類(lèi)型的實(shí)際長(zhǎng)度是它的值的實(shí)際長(zhǎng)度+1抖拦,這一個(gè)字節(jié)用于保存實(shí)際使用了多大的長(zhǎng)度。
- text:存儲(chǔ)可變長(zhǎng)度的非Unicode數(shù)據(jù)舷暮,最大長(zhǎng)度為2^31-1個(gè)字符态罪。存儲(chǔ)或檢索過(guò)程中,不存在大小寫(xiě)轉(zhuǎn)換脚牍。
- 總結(jié):盡量用varchar,能用varchar的地方不用text向臀。char最大255個(gè)字符。varchar最大65535個(gè)字節(jié)(因此不同字符集诸狭,所能存儲(chǔ)的字符個(gè)數(shù)是不同的)券膀。
text最大65535字符 - 參考
mysql中key 、primary key 驯遇、unique key 與index區(qū)別
- Key是索引約束芹彬,對(duì)表中字段進(jìn)行約束索引的,都是通過(guò)primary foreign unique等創(chuàng)建的(主鍵PRIMARY KEY 叉庐,外鍵FOREIGN KEY舒帮, 唯一索引UNIQUE KEY)。
- 主鍵(PRIMARY KEY)是本表的唯一標(biāo)識(shí)
- 外鍵(FOREIGN KEY)是與另一個(gè)表相關(guān)聯(lián)
- 唯一索引(UNIQUE KEY)主要是用來(lái)防止數(shù)據(jù)插入的時(shí)候重復(fù)的陡叠。
KEY:key 是數(shù)據(jù)庫(kù)的邏輯結(jié)構(gòu)玩郊,它包含兩層意義,一是約束(偏重于約束和規(guī)范數(shù)據(jù)庫(kù)的結(jié)構(gòu)完整性)枉阵,二是索引(輔助查詢(xún)用的)译红。包括primary key, unique key, foreign key 等。
INDEX:index是數(shù)據(jù)庫(kù)的物理結(jié)構(gòu)兴溜,它只是輔助查詢(xún)的侦厚,它創(chuàng)建時(shí)會(huì)在另外的表空間(mysql中的innodb表空間)以一個(gè)類(lèi)似目錄的結(jié)構(gòu)存儲(chǔ)。索引要分類(lèi)的話拙徽,分為前綴索引刨沦、全文本索引等;因此膘怕,索引只是索引想诅,它不會(huì)去約束索引的字段的行為。