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í)候都對這個數(shù)據(jù)列刷新。
- TIMESTAMP DEFAULT CURRENT_TIMESTAMP: 在創(chuàng)建新記錄的時(shí)候把這個字段設(shè)置為當(dāng)前時(shí)間,但以后修改時(shí),不再刷新它。
- TIMESTAMP ON UPDATE CURRENT_TIMESTAMP: 在創(chuàng)建新記錄的時(shí)候把這個字段設(shè)置為0,以后修改時(shí)刷新它。
- TIMESTAMP DEFAULT ‘yyyy-mm-dd hh:mm:ss’ ON UPDATE CURRENT_TIMESTAMP: 在創(chuàng)建新記錄的時(shí)候把這個字段設(shè)置為給定值,以后修改時(shí)刷新它。
- TIMESTAMP列不為空時(shí),默認(rèn)值可以為“0000-00-00 00:00:00”,但不能為null。
- 一個表可以存在多個TIMESTAMP列,但一個表只有一個TIMESTAMP類型的字段可以在默認(rèn)值或者UPDATE部分用CURRENT_TIMESTAMP,即設(shè)置為數(shù)據(jù)更新而改變?yōu)閿?shù)據(jù)庫系統(tǒng)當(dāng)前值。
- TIMESTAMP列的默認(rèn)值是CURRENT_TIMESTAMP常量值。當(dāng)紀(jì)錄數(shù)據(jù)發(fā)生變化的時(shí)候,TIMESTAMP列會自動將其值設(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:存儲定長數(shù)據(jù)很方便,CHAR字段上的索引效率極高,可以有默認(rèn)值,比如定義char(10),那么不論你存儲的數(shù)據(jù)是否達(dá)到了10個字節(jié),都要占去10個字節(jié)的空間(自動用空格填充),且在檢索的時(shí)候后面的空格會隱藏掉,所以檢索出來的數(shù)據(jù)需要記得用strip()之類的函數(shù)去過濾空格。
- varchar:存儲變長數(shù)據(jù),但存儲效率沒有CHAR高。保存數(shù)據(jù)的時(shí)候,不進(jìn)行空格自動填充,而且如果數(shù)據(jù)存在空格時(shí),當(dāng)值保存和檢索時(shí)尾部的空格仍會保留。另外,varchar類型的實(shí)際長度是它的值的實(shí)際長度+1,這一個字節(jié)用于保存實(shí)際使用了多大的長度。
- text:存儲可變長度的非Unicode數(shù)據(jù),最大長度為2^31-1個字符。存儲或檢索過程中,不存在大小寫轉(zhuǎn)換。
- 總結(jié):盡量用varchar,能用varchar的地方不用text。char最大255個字符。varchar最大65535個字節(jié)(因此不同字符集,所能存儲的字符個數(shù)是不同的)。
text最大65535字符 - 參考
mysql中key 、primary key 、unique key 與index區(qū)別
- Key是索引約束,對表中字段進(jìn)行約束索引的,都是通過primary foreign unique等創(chuàng)建的(主鍵PRIMARY KEY ,外鍵FOREIGN KEY, 唯一索引UNIQUE KEY)。
- 主鍵(PRIMARY KEY)是本表的唯一標(biāo)識
- 外鍵(FOREIGN KEY)是與另一個表相關(guān)聯(lián)
- 唯一索引(UNIQUE KEY)主要是用來防止數(shù)據(jù)插入的時(shí)候重復(fù)的。
KEY:key 是數(shù)據(jù)庫的邏輯結(jié)構(gòu),它包含兩層意義,一是約束(偏重于約束和規(guī)范數(shù)據(jù)庫的結(jié)構(gòu)完整性),二是索引(輔助查詢用的)。包括primary key, unique key, foreign key 等。
INDEX:index是數(shù)據(jù)庫的物理結(jié)構(gòu),它只是輔助查詢的,它創(chuàng)建時(shí)會在另外的表空間(mysql中的innodb表空間)以一個類似目錄的結(jié)構(gòu)存儲。索引要分類的話,分為前綴索引、全文本索引等;因此,索引只是索引,它不會去約束索引的字段的行為。