數(shù)據(jù)庫 之 MySQL數(shù)據(jù)類型和常用字段屬性總結(jié)

前言

好比C++中顶滩,定義int類型需要多少字節(jié)余掖,定義double類型需要多少字節(jié)一樣,MySQL對表每個列中的數(shù)據(jù)也會實行嚴格控制,這是數(shù)據(jù)驅(qū)動應(yīng)用程序成功的關(guān)鍵盐欺。M前言

好比C++中赁豆,定義int類型需要多少字節(jié),定義double類型需要多少字節(jié)一樣冗美,MySQL對表每個列中的數(shù)據(jù)也會實行嚴格控制魔种,這是數(shù)據(jù)驅(qū)動應(yīng)用程序成功的關(guān)鍵。MySQL提供了一組可以賦給表中各個列的數(shù)據(jù)類型粉洼,每個類型都強制數(shù)據(jù)滿足為該數(shù)據(jù)類型預(yù)先確定的一組規(guī)則节预,例如大小、類型及格式属韧。

這里先總結(jié)數(shù)據(jù)類型安拟。MySQL中的數(shù)據(jù)類型大的方面來分,可以分為:日期和時間宵喂、數(shù)值糠赦,以及字符串。下面就分開來進行總結(jié)锅棕。

日期和時間數(shù)據(jù)類型

MySQL數(shù)據(jù)類型含義

date3字節(jié)拙泽,日期,格式:2014-09-18

time3字節(jié)裸燎,時間顾瞻,格式:08:42:30

datetime8字節(jié),日期時間德绿,格式:2014-09-18 08:42:30

timestamp4字節(jié)朋其,自動存儲記錄修改的時間

year1字節(jié),年份

數(shù)值數(shù)據(jù)類型

整型

MySQL數(shù)據(jù)類型含義(有符號)

tinyint1字節(jié)脆炎,范圍(-128~127)

smallint2字節(jié),范圍(-32768~32767)

mediumint3字節(jié)氓辣,范圍(-8388608~8388607)

int4字節(jié)秒裕,范圍(-2147483648~2147483647)

bigint8字節(jié),范圍(+-9.22*10的18次方)

上面定義的都是有符號的钞啸,當(dāng)然了几蜻,也可以加上unsigned關(guān)鍵字,定義成無符號的類型体斩,那么對應(yīng)的取值范圍就要翻翻了梭稚,比如:

tinyint unsigned的取值范圍為0~255。

浮點型

MySQL數(shù)據(jù)類型含義

float(m, d)4字節(jié)絮吵,單精度浮點型弧烤,m總個數(shù),d小數(shù)位

double(m, d)8字節(jié)蹬敲,雙精度浮點型暇昂,m總個數(shù)莺戒,d小數(shù)位

decimal(m, d)decimal是存儲為字符串的浮點數(shù)

我在MySQL中建立了一個表,有一列為float(5, 3)急波;做了以下試驗:

1.插入123.45678从铲,最后查詢得到的結(jié)果為99.999;

2.插入123.456澄暮,最后查詢結(jié)果為99.999名段;

3.插入12.34567,最后查詢結(jié)果為12.346泣懊;

所以伸辟,在使用浮點型的時候,還是要注意陷阱的嗅定,要以插入數(shù)據(jù)庫中的實際結(jié)果為準自娩。

字符串?dāng)?shù)據(jù)類型

MySQL數(shù)據(jù)類型含義

char(n)固定長度,最多255個字符

varchar(n)可變長度渠退,最多65535個字符

tinytext可變長度忙迁,最多255個字符

text可變長度,最多65535個字符

mediumtext可變長度碎乃,最多2的24次方-1個字符

longtext可變長度姊扔,最多2的32次方-1個字符

1.char(n)和varchar(n)中括號中n代表字符的個數(shù),并不代表字節(jié)個數(shù)梅誓,所以當(dāng)使用了中文的時候(UTF8)意味著可以插入m個中文恰梢,但是實際會占用m*3個字節(jié)。

2.同時char和varchar最大的區(qū)別就在于char不管實際value都會占用n個字符的空間梗掰,而varchar只會占用實際字符應(yīng)該占用的空間+1嵌言,并且實際空間+1<=n。

3.超過char和varchar的n設(shè)置后及穗,字符串會被截斷摧茴。

4.char的上限為255字節(jié),varchar的上限65535字節(jié)埂陆,text的上限為65535苛白。

5.char在存儲的時候會截斷尾部的空格,varchar和text不會焚虱。

6.varchar會使用1-3個字節(jié)來存儲長度购裙,text不會。

其它類型

1.enum(“member1″, “member2″, … “member65535″)

enum數(shù)據(jù)類型就是定義了一種枚舉鹃栽,最多包含65535個不同的成員躏率。當(dāng)定義了一個enum的列時,該列的值限制為列定義中聲明的值。如果列聲明包含NULL屬性禾锤,則NULL將被認為是一個有效值私股,并且是默認值。如果聲明了NOT NULL恩掷,則列表的第一個成員是默認值倡鲸。

2.set(“member”, “member2″, … “member64″)

set數(shù)據(jù)類型為指定一組預(yù)定義值中的零個或多個值提供了一種方法,這組值最多包括64個成員黄娘。值的選擇限制為列定義中聲明的值峭状。

數(shù)據(jù)類型屬性

上面大概總結(jié)了MySQL中的數(shù)據(jù)類型,當(dāng)然了逼争,上面的總結(jié)肯定是不全面的优床,如果要非常全面的總結(jié)這些內(nèi)容,好幾篇文章都不夠的誓焦。下面就再來總結(jié)一些常用的屬性胆敞。

1.auto_increment

auto_increment能為新插入的行賦一個唯一的整數(shù)標識符。為列賦此屬性將為每個新插入的行賦值為上一次插入的ID+1杂伟。

MySQL要求將auto_increment屬性用于作為主鍵的列移层。此外,每個表只允許有一個auto_increment列赫粥。例如:

復(fù)制代碼代碼如下:

id smallint not null auto_increment primary key

2.binary

binary屬性只用于char和varchar值观话。當(dāng)為列指定了該屬性時,將以區(qū)分大小寫的方式排序越平。與之相反频蛔,忽略binary屬性時,將使用不區(qū)分大小寫的方式排序秦叛。例如:

復(fù)制代碼代碼如下:

hostname char(25) binary not null

3.default

default屬性確保在沒有任何值可用的情況下晦溪,賦予某個常量值,這個值必須是常量挣跋,因為MySQL不允許插入函數(shù)或表達式值尼变。此外,此屬性無法用于BLOB或TEXT列浆劲。如果已經(jīng)為此列指定了NULL屬性,沒有指定默認值時默認值將為NULL哀澈,否則默認值將依賴于字段的數(shù)據(jù)類型牌借。例如:

復(fù)制代碼代碼如下:

subscribed enum('0', '1') not null default '0'

4.index

如果所有其他因素都相同,要加速數(shù)據(jù)庫查詢割按,使用索引通常是最重要的一個步驟膨报。索引一個列會為該列創(chuàng)建一個有序的鍵數(shù)組,每個鍵指向其相應(yīng)的表行。以后針對輸入條件可以搜索這個有序的鍵數(shù)組现柠,與搜索整個未索引的表相比院领,這將在性能方面得到極大的提升。

復(fù)制代碼代碼如下:

create table employees

(

id varchar(9) not null,

firstname varchar(15) not null,

lastname varchar(25) not null,

email varchar(45) not null,

phone varchar(10) not null,

index lastname(lastname),

primary key(id)

);

我們也可以利用MySQL的create index命令在創(chuàng)建表之后增加索引:

復(fù)制代碼代碼如下:

create index lastname on employees (lastname(7));

這一次只索引了名字的前7個字符够吩,因為可能不需要其它字母來區(qū)分不同的名字比然。因為使用較小的索引時性能更好,所以應(yīng)當(dāng)在實踐中盡量使用小的索引周循。

5.not null

如果將一個列定義為not null强法,將不允許向該列插入null值。建議在重要情況下始終使用not null屬性湾笛,因為它提供了一個基本驗證饮怯,確保已經(jīng)向查詢傳遞了所有必要的值。

6.null

為列指定null屬性時嚎研,該列可以保持為空蓖墅,而不論行中其它列是否已經(jīng)被填充。記住临扮,null精確的說法是“無”论矾,而不是空字符串或0。

7.primary key

primary key屬性用于確保指定行的唯一性公条。指定為主鍵的列中拇囊,值不能重復(fù),也不能為空靶橱。為指定為主鍵的列賦予auto_increment屬性是很常見的寥袭,因為此列不必與行數(shù)據(jù)有任何關(guān)系,而只是作為一個唯一標識符关霸。主鍵又分為以下兩種:

(1)單字段主鍵

如果輸入到數(shù)據(jù)庫中的每行都已經(jīng)有不可修改的唯一標識符传黄,一般會使用單字段主鍵。注意队寇,此主鍵一旦設(shè)置就不能再修改膘掰。

(2)多字段主鍵

如果記錄中任何一個字段都不可能保證唯一性,就可以使用多字段主鍵佳遣。這時识埋,多個字段聯(lián)合起來確保唯一性。如果出現(xiàn)這種情況零渐,指定一個auto_increment整數(shù)作為主鍵是更好的辦法窒舟。

8.unique

被賦予unique屬性的列將確保所有值都有不同的值,只是null值可以重復(fù)诵盼。一般會指定一個列為unique惠豺,以確保該列的所有值都不同银还。例如:

復(fù)制代碼代碼如下:

email varchar(45) unique

9.zerofill

zerofill屬性可用于任何數(shù)值類型,用0填充所有剩余字段空間洁墙。例如蛹疯,無符號int的默認寬度是10;因此热监,當(dāng)“零填充”的int值為4時捺弦,將表示它為0000000004。例如:

復(fù)制代碼代碼如下:

orderid int unsigned zerofill not null

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末狼纬,一起剝皮案震驚了整個濱河市羹呵,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌疗琉,老刑警劉巖冈欢,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異盈简,居然都是意外死亡凑耻,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門柠贤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來香浩,“玉大人,你說我怎么就攤上這事臼勉×诳裕” “怎么了?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵宴霸,是天一觀的道長囱晴。 經(jīng)常有香客問我,道長瓢谢,這世上最難降的妖魔是什么畸写? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮氓扛,結(jié)果婚禮上枯芬,老公的妹妹穿的比我還像新娘。我一直安慰自己采郎,他們只是感情好千所,可當(dāng)我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蒜埋,像睡著了一般淫痰。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上理茎,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天黑界,我揣著相機與錄音,去河邊找鬼皂林。 笑死朗鸠,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的础倍。 我是一名探鬼主播烛占,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼沟启!你這毒婦竟也來了忆家?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤德迹,失蹤者是張志新(化名)和其女友劉穎芽卿,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體胳搞,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡卸例,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了肌毅。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片筷转。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖悬而,靈堂內(nèi)的尸體忽然破棺而出呜舒,到底是詐尸還是另有隱情,我是刑警寧澤笨奠,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布袭蝗,位于F島的核電站,受9級特大地震影響艰躺,放射性物質(zhì)發(fā)生泄漏呻袭。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一腺兴、第九天 我趴在偏房一處隱蔽的房頂上張望左电。 院中可真熱鬧,春花似錦页响、人聲如沸篓足。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽栈拖。三九已至,卻和暖如春没陡,著一層夾襖步出監(jiān)牢的瞬間涩哟,已是汗流浹背索赏。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留贴彼,地道東北人潜腻。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像器仗,于是被迫代替她去往敵國和親融涣。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,577評論 2 353

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

  • 關(guān)于Mongodb的全面總結(jié) MongoDB的內(nèi)部構(gòu)造《MongoDB The Definitive Guide》...
    中v中閱讀 31,928評論 2 89
  • MYSQL 基礎(chǔ)知識 1 MySQL數(shù)據(jù)庫概要 2 簡單MySQL環(huán)境 3 數(shù)據(jù)的存儲和獲取 4 MySQL基本操...
    Kingtester閱讀 7,809評論 5 116
  • 什么是數(shù)據(jù)庫精钮? 數(shù)據(jù)庫是存儲數(shù)據(jù)的集合的單獨的應(yīng)用程序威鹿。每個數(shù)據(jù)庫具有一個或多個不同的API,用于創(chuàng)建轨香,訪問忽你,管理...
    chen_000閱讀 4,035評論 0 19
  • 坐著時光的輕舟,我看見了滄桑里的自己弹沽。感謝時光檀夹,讓我在層層疊疊的歲月中,漸漸慢下來策橘,漸漸靜下來炸渡,在慢與靜里...
    冰夫閱讀 116評論 0 0
  • 你說:“不喜歡哭是因為怕別人問怎么了。所以拼命地笑丽已“龆拢” 而會有一天,你披掛的鎧甲如一片片的黑夜和一...
    別人家的小孩閱讀 665評論 4 4