主頁(yè) > 知識(shí)庫(kù) > mysql數(shù)據(jù)類(lèi)型和字段屬性原理與用法詳解

mysql數(shù)據(jù)類(lèi)型和字段屬性原理與用法詳解

熱門(mén)標(biāo)簽:鄭州網(wǎng)絡(luò)外呼系統(tǒng)價(jià)錢(qián) 南寧外呼系統(tǒng)招商 400電話(huà)到哪辦理優(yōu)惠 博樂(lè)電銷(xiāo)機(jī)器人 電話(huà)機(jī)器人是電腦呼號(hào)嗎 機(jī)器人打電銷(xiāo)電話(huà) 怎么更改高德地圖標(biāo)注 云南大數(shù)據(jù)外呼系統(tǒng) 上海市三維地圖標(biāo)注

本文實(shí)例講述了mysql數(shù)據(jù)類(lèi)型和字段屬性。分享給大家供大家參考,具體如下:

本文內(nèi)容:

  • 數(shù)據(jù)類(lèi)型
    • 數(shù)值類(lèi)型
      • 整數(shù)型
      • 浮點(diǎn)型
      • 定點(diǎn)型
    • 日期時(shí)間類(lèi)型
    • 字符串類(lèi)型
    • 補(bǔ)充:
      • 顯示寬度與zerofll
      • 記錄長(zhǎng)度
  • 字段屬性
    • 空\(chéng)不為空值:NULL、NOT NULL
    • 主鍵:primary key
    • 唯一鍵:unique key
    • 自增長(zhǎng):auto_increment
    • 默認(rèn)值:default
    • 字段描述:comment
    • 補(bǔ)充:
      • 復(fù)合鍵

首發(fā)日期:2018-04-08


數(shù)據(jù)類(lèi)型:

mysql的數(shù)據(jù)類(lèi)型就是存儲(chǔ)數(shù)據(jù)的類(lèi)型。

數(shù)值類(lèi)型:

  • 整數(shù)類(lèi)型:tinyint,smallint,mediumint,integer,bigint
    • 默認(rèn)是有符號(hào),如果需要使用無(wú)符號(hào)的數(shù)據(jù)類(lèi)型要在后面加"UNSIGNED"
類(lèi)型 簡(jiǎn)寫(xiě) 字節(jié)大小 (signed)范圍 (unsigned)范圍 備注
整數(shù)型:          
TINYINT   1 0~255 -128~127  
SMALLINT   2 0~65535 -32768~32767  
MEDIUMINT   3 0~16777215 -8388608~8388607  
INTEGER INT 4 0~4294967295 -2147483648~2147483647  
BIGINT   8 0~264-1 -263~263-1  
  • 小數(shù)類(lèi)型:
    • 浮點(diǎn)類(lèi)型:float(size,d),double(size,d)
      • size是數(shù)值的最大位數(shù),d是小數(shù)點(diǎn)右側(cè)的位數(shù)(即使你沒(méi)輸夠那么多位也會(huì)補(bǔ)全那么多位)。
      • FLOAT的精度為6~7位(依據(jù)情況不同?畢竟機(jī)器是以二進(jìn)制存儲(chǔ)的),DOUBLE的精度為14~15位
      • 整數(shù)部分的個(gè)數(shù)為SIZE-D,直接存入的值的個(gè)數(shù)不能多于這個(gè),但如果浮點(diǎn)數(shù)四舍五入導(dǎo)致整數(shù)進(jìn)位而溢出超過(guò)最大位數(shù)的,系統(tǒng)允許成立(某些版本貌似已經(jīng)不允許了,所以一般小數(shù)位也不要超過(guò))。
      • 很多時(shí)候沒(méi)必要關(guān)注兩個(gè)浮點(diǎn)的數(shù)值范圍大?。ㄊ菢O大的),注重點(diǎn)應(yīng)該是它的精度。
    • 定點(diǎn)型:decimal(size,d)
      • size是數(shù)值的最大位數(shù),最大為65,d是小數(shù)點(diǎn)右側(cè)的最大位數(shù),最大為30。
      • 定點(diǎn)型不允許因?yàn)樾?shù)部分四舍五入導(dǎo)致整數(shù)部分長(zhǎng)度超出范圍。
      • DECIMAL是不會(huì)損失精度的??梢岳斫獬墒褂谩白址贝鎯?chǔ)(MYSQL權(quán)威指南這么說(shuō))。
    • 直接不帶括號(hào)的數(shù)據(jù)類(lèi)型float、double、decimal代表沒(méi)有小數(shù)部分

時(shí)間日期類(lèi)型:

時(shí)間日期類(lèi)型包括date,time,datetime,timestamp,year;

  • Datetime:時(shí)間日期,格式是YYYY-MM-DD HH:II:SS,表示的范圍是從1000到9999年(有些版本已經(jīng)允許0-9999?不確定);
  • Date:日期,格式是YYYY-MM-DD ,表示的范圍是從1000到9999年
  • Time:時(shí)間段,格式是HH:II:SS, 指定的時(shí)間在某個(gè)區(qū)間之間,有正負(fù)。表示的范圍 -838:59:59~838:59:59,這代表某個(gè)日期的前后時(shí)間范圍【如果你僅僅想要用來(lái)表示24小時(shí)內(nèi)的時(shí)間,可以忽略它的時(shí)間范圍】
  • Timestamp:格式是YYYY-MM-DD HH:II:SS,表示的范圍從1970-01-01 00:00:00到2038-01-19 03:14:07 【一旦該行記錄被修改,那么timestamp會(huì)修改成當(dāng)前時(shí)間?!?
  • Year:年份,表示的范圍1901-2156
    • 原本有兩種格式,year(2)和year(4),但5.7中移除了year(2)。
     

字符串類(lèi)型  :

    • set  :集合字符串。將一個(gè)個(gè)特定的字符串放到集合里面。

      • 定義了集合之后,不能插入集合元素之外的字符串,(可以插入多個(gè)符合條件的字符串)
      • 集合字符串實(shí)際上也是僅僅存儲(chǔ)數(shù)值,系統(tǒng)自動(dòng)轉(zhuǎn)換成對(duì)應(yīng)的字符串。
      • 集合中每一個(gè)元素對(duì)應(yīng)一個(gè)二進(jìn)制位,被選中的為1,沒(méi)選中的為0,左邊為二進(jìn)制中的低位,右邊為高位,從右到左得到二進(jìn)制結(jié)果
create table my_set(
hobby set('football','basketball','pingpong','computer')
)charset utf8;

insert into my_set values('basketball,computer');
insert into my_set values(3);-- 3=0011
insert into my_set values(5);-- 5=0101

    • enum  :枚舉字符串

      • 有點(diǎn)類(lèi)似set,但這里只能插入一個(gè)字符串(set類(lèi)型的字段的值可以是多個(gè)set元素,但enum只能是其中一個(gè)元素)
      • 將可能出現(xiàn)的數(shù)據(jù)列舉出來(lái),實(shí)際存儲(chǔ)的數(shù)據(jù)只能是列舉出來(lái)的數(shù)據(jù)。
      • 使用枚舉有利于統(tǒng)一數(shù)據(jù),以及節(jié)省存儲(chǔ)空間(枚舉只是存儲(chǔ)數(shù)值,系統(tǒng)轉(zhuǎn)換成字符串)。
      • 枚舉元素實(shí)際上按定義的順序標(biāo)號(hào),從1開(kāi)始,所以可以直接插入枚舉元素對(duì)應(yīng)的數(shù)值。
      • 如:
create table my_enum(
gender enum('male','female','unknown')
)charset utf8;

  • blob  :二進(jìn)制數(shù)據(jù)字符串

    • 存儲(chǔ)二進(jìn)制數(shù)據(jù)(少用)
  • text  :文字字符串

    • 存儲(chǔ)文字,當(dāng)字符大于255時(shí),一般使用text;
  • varchar  :變長(zhǎng)字符串

    • varchar(L),L代表字符長(zhǎng)度,單位為字符,最大長(zhǎng)度為65536。在實(shí)際存儲(chǔ)中需要1到2個(gè)字節(jié)來(lái)存儲(chǔ)長(zhǎng)度(1還是2由實(shí)際大小決定,216=35536,=255的一般一個(gè)字節(jié)),在使用時(shí)根據(jù)定義的大小來(lái)分配空間,但會(huì)根據(jù)實(shí)際需要使用的縮小空間(比如規(guī)定60大小,實(shí)際只有30,那么實(shí)際空間就是31~32)。
    • 當(dāng)L大于255時(shí),建議使用Text,而不是varchar;
  • char  :定長(zhǎng)字符串

    • char(L),L代表字符長(zhǎng)度,單位為字符,最大長(zhǎng)度為255,不使用L時(shí)默認(rèn)為1
    • 不同環(huán)境中根據(jù)字符大小,實(shí)際占有的空間不同;在UTF8環(huán)境下,char(4)所用的字節(jié)數(shù)為4*3=12;

補(bǔ)充:

    • 顯示寬度 與填充 :

      • 在列類(lèi)型后面顯示的數(shù)值,代表數(shù)據(jù)最終顯示的最少位數(shù)(包含符號(hào))。
      • 一般不夠顯示寬度的數(shù)據(jù)都會(huì)采用空格填充,也可以使用zerofill來(lái)使用零填充(零填充會(huì)導(dǎo)致數(shù)據(jù)類(lèi)型自動(dòng)變成無(wú)符號(hào)的)。
      • tiny(3)的空格填充效果:,zerofill效果:
create table myInt(t1 TINYINT(3));
drop table myInt;
insert into myInt values(127),(1);
select * from myInt;
alter table myInt modify t1 tinyint(3) zerofill;
select * from myInt;
  • 不要輕易的使用最大限度來(lái)存儲(chǔ)字符串,因?yàn)樯婕坝涗涢L(zhǎng)度問(wèn)題  :

    • MySQL中規(guī)定任何一條數(shù)據(jù)最長(zhǎng)不能超過(guò)65535個(gè)字節(jié)
    • 如果有任何一個(gè)字段允許為空,那么系統(tǒng)會(huì)自動(dòng)從整個(gè)記錄中保存一個(gè)字節(jié)來(lái)存儲(chǔ)NULL;
    • text文本不占用記錄長(zhǎng)度,額外存儲(chǔ)。
    • UTF8中varchar的最大限度:65535-2(需要兩個(gè)字節(jié)來(lái)存儲(chǔ)長(zhǎng)度)  /3=21844,所以最大字符數(shù)為21844
    • GBK中varchar的最大限度:65535-2(需要兩個(gè)字節(jié)來(lái)存儲(chǔ)長(zhǎng)度) /2=32766

字段屬性:

字段屬性是字段除數(shù)據(jù)類(lèi)型外的屬性,一般有空\(chéng)不為空值、主鍵、唯一鍵、自增長(zhǎng)、默認(rèn)值、描述等屬性。

空\(chéng)不為空值:NULL、NOT NULL

  • 字段的數(shù)據(jù)默認(rèn)情況下是允許為空的,比如說(shuō)一條人的信息記錄中可以沒(méi)有郵箱(或許有些人考慮用“空字符串”來(lái)代表),我們?cè)试S可以不填入數(shù)據(jù)的字段可以設(shè)置為null;但比如說(shuō)某些必填數(shù)據(jù),我們不想填入的時(shí)候留空,可以設(shè)置這個(gè)字段為not null
  • 允許為空時(shí)的數(shù)據(jù),空的數(shù)據(jù)顯示為null:
  • 不為空的字段,插入null時(shí),會(huì)報(bào)錯(cuò):
  • null\not null屬性的定義方式(因?yàn)槟J(rèn)允許空,所以主要關(guān)注not null):;當(dāng)然也可以通過(guò)修改字段的形式來(lái)給字段定義not null屬性

主鍵:primary key

  • 主鍵用于唯一標(biāo)識(shí)每一條記錄(每個(gè)人都有自己唯一的身份證)
  • 每一張表只能有一個(gè)主鍵。
  • 因?yàn)槲ㄒ粯?biāo)識(shí),所以主鍵字段的數(shù)據(jù)不能為空,并且主鍵字段的數(shù)據(jù)值不能重復(fù)
  • 主鍵也是一種索引,可以提高查找速率。
  • 主鍵的定義:
    • 1.定義表結(jié)構(gòu)的時(shí)候定義成字段的屬性。
    • 2.修改表結(jié)構(gòu),增加一個(gè)帶主鍵的字段。
    • 3.修改表結(jié)構(gòu),給某一字段增加主鍵屬性。
  • 主鍵的用途:主鍵的主要用途是用來(lái)唯一標(biāo)識(shí)每一條記錄,比如我們想將兩個(gè)表(學(xué)生表跟老師表)的多對(duì)多關(guān)系封裝到一個(gè)表中,這個(gè)抽取的映射字段一般都是各自的主鍵。;并且由于主鍵的數(shù)據(jù)的不可重復(fù)性,也用來(lái)約束數(shù)據(jù)的唯一性。
  • 主鍵的刪除:
    alter table 表名 drop primary key;

唯一鍵:unique key

  • 唯一鍵的功能與主鍵有點(diǎn)類(lèi)型,但不同的是主鍵只能有一個(gè),唯一鍵可以有多個(gè),而且唯一鍵的字段的數(shù)據(jù)允許為空。
  • 唯一鍵可以約束字段,使得字段的數(shù)據(jù)不能重復(fù)
  • 如果唯一鍵同時(shí)也有not null,并且表中沒(méi)有主鍵的話(huà),在desc查看表結(jié)構(gòu)中會(huì)顯示成主鍵
  • 如果唯一鍵也不允許為空,那么功能與主鍵相同
  • 唯一鍵的定義方法可以參考主鍵的。
  • 唯一鍵的刪除:
    alter table 表名 drop index 唯一鍵名; -- 唯一鍵默認(rèn)使用字段名來(lái)定義名字

自增長(zhǎng):auto_increment

  • 自增長(zhǎng)的功能是可以使某個(gè)字段的數(shù)據(jù)隨著記錄的插入而進(jìn)行增長(zhǎng)(不給這個(gè)字段插入數(shù)據(jù)的情況下)
  • 自增長(zhǎng)的前提是這個(gè)字段必須是一個(gè)“索引”,比如主鍵、唯一鍵
  • 自增長(zhǎng)的前提這個(gè)字段的數(shù)據(jù)類(lèi)型是一個(gè)數(shù)值型的,(如果給了float,也不會(huì)增長(zhǎng)成小數(shù),而僅僅是整數(shù))
  • 一個(gè)表只能有一個(gè)自增長(zhǎng)。
  • 只有不給值,或者給null的情況下,才能正確自增長(zhǎng);如果某一次自增長(zhǎng)失敗了,那么下一次會(huì)從當(dāng)前字段的最大值開(kāi)始繼續(xù)自增長(zhǎng)。
  • 自增長(zhǎng)的定義方法:;當(dāng)然也可以通過(guò)修改字段的形式來(lái)給字段定義not null屬性
  • 自增長(zhǎng)的修改:
    • 修改增長(zhǎng)速度:set auto_increment = 值;
    • 修改下次增長(zhǎng)的值:alter table 表名 auto_increment = 值; 【修改的值只能變大,不能變小,因?yàn)榭赡軐?dǎo)致數(shù)據(jù)重復(fù)問(wèn)題】
  • 自增長(zhǎng)的查看:show vairable like "auto_increment%";
  • 自增長(zhǎng)的刪除:利用alter來(lái)刪除,alter修改字段屬性的時(shí)候如果不帶上原來(lái)的屬性就會(huì)被刪掉:

默認(rèn)值:default

  • 默認(rèn)值的功能是當(dāng)我們不給一個(gè)字段賦值的時(shí)候,使用默認(rèn)值作為數(shù)據(jù),比如不選擇性別的時(shí)候,默認(rèn)使用“保密”;
  • 默認(rèn)值的定義方式:

字段描述:comment

  • 字段描述是用來(lái)描述字段的,能在查看數(shù)據(jù)表創(chuàng)建語(yǔ)句的時(shí)候顯示出來(lái)(不會(huì)再select結(jié)果中顯示出來(lái)),可以幫助我們了解某一個(gè)字段的意義。
  • 定義方式:

補(bǔ)充:

  • 復(fù)合鍵:可以將多個(gè)字段組成一個(gè)鍵,比如學(xué)生可以選多門(mén)課,但學(xué)生號(hào)跟課程號(hào)一起的時(shí)候應(yīng)該是唯一的,這里使用主鍵來(lái)限制這個(gè)情況
    • 定義方法(復(fù)合以主鍵為例):
    • 數(shù)據(jù)約束(以上面的表為例):

更多關(guān)于MySQL相關(guān)內(nèi)容感興趣的讀者可查看本站專(zhuān)題:《MySQL查詢(xún)技巧大全》、《MySQL事務(wù)操作技巧匯總》、《MySQL存儲(chǔ)過(guò)程技巧大全》、《MySQL數(shù)據(jù)庫(kù)鎖相關(guān)技巧匯總》及《MySQL常用函數(shù)大匯總》

希望本文所述對(duì)大家MySQL數(shù)據(jù)庫(kù)計(jì)有所幫助。

您可能感興趣的文章:
  • 基于PostgreSQL和mysql數(shù)據(jù)類(lèi)型對(duì)比兼容
  • MySQL數(shù)據(jù)類(lèi)型優(yōu)化原則
  • 詳解MySQL中的數(shù)據(jù)類(lèi)型和schema優(yōu)化
  • MyBatis JdbcType 與Oracle、MySql數(shù)據(jù)類(lèi)型對(duì)應(yīng)關(guān)系說(shuō)明
  • 深入分析MySQL數(shù)據(jù)類(lèi)型 DECIMAL
  • mysql8.0.19基礎(chǔ)數(shù)據(jù)類(lèi)型詳解
  • MySQL入門(mén)(二) 數(shù)據(jù)庫(kù)數(shù)據(jù)類(lèi)型詳解
  • 詳解MySQL數(shù)據(jù)類(lèi)型DECIMAL(N,M)中N和M分別表示的含義
  • MySQL操作之JSON數(shù)據(jù)類(lèi)型操作詳解
  • MySQL數(shù)據(jù)類(lèi)型全解析

標(biāo)簽:定西 杭州 恩施 白銀 益陽(yáng) 秦皇島 寧夏 澳門(mén)

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《mysql數(shù)據(jù)類(lèi)型和字段屬性原理與用法詳解》,本文關(guān)鍵詞  mysql,數(shù)據(jù),類(lèi)型,和,字段,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《mysql數(shù)據(jù)類(lèi)型和字段屬性原理與用法詳解》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于mysql數(shù)據(jù)類(lèi)型和字段屬性原理與用法詳解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章