MySQL中幾個數(shù)據(jù)類型區(qū)別

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í)刷新它。
  1. TIMESTAMP列不為空時(shí),默認(rèn)值可以為“0000-00-00 00:00:00”,但不能為null。
  2. 一個表可以存在多個TIMESTAMP列,但一個表只有一個TIMESTAMP類型的字段可以在默認(rèn)值或者UPDATE部分用CURRENT_TIMESTAMP,即設(shè)置為數(shù)據(jù)更新而改變?yōu)閿?shù)據(jù)庫系統(tǒng)當(dāng)前值。
  3. TIMESTAMP列的默認(rèn)值是CURRENT_TIMESTAMP常量值。當(dāng)紀(jì)錄數(shù)據(jù)發(fā)生變化的時(shí)候,TIMESTAMP列會自動將其值設(shè)定為CURRENT_TIMESTAMP。
  4. 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)。
  1. 主鍵(PRIMARY KEY)是本表的唯一標(biāo)識
  2. 外鍵(FOREIGN KEY)是與另一個表相關(guān)聯(lián)
  3. 唯一索引(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)存儲。索引要分類的話,分為前綴索引、全文本索引等;因此,索引只是索引,它不會去約束索引的字段的行為。

  • 參考1

  • 參考2

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容