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

所謂的數(shù)據(jù)類型:對(duì)數(shù)據(jù)進(jìn)行統(tǒng)一的分類疾掰,從系統(tǒng)的 角度出發(fā)為了能夠使用統(tǒng)一的方式進(jìn)行管理,更好的利用有限的空間;
SQL中將數(shù)據(jù)類型分成了三大類:數(shù)值類型 字符串類型 時(shí)間日期類型

Paste_Image.png

數(shù)值類型:都是數(shù)值

系統(tǒng)將數(shù)值型分為整數(shù)型和小數(shù)型

整數(shù)型

存放整形數(shù)據(jù):在sql中考慮到如何節(jié)省空間沪斟,所以系統(tǒng)將整形有細(xì)分了
5類

Paste_Image.png

SQL中的數(shù)值類型全部是默認(rèn)有符號(hào)的:分正負(fù)
有時(shí)候需要使用無(wú)符號(hào)數(shù)據(jù):需要給數(shù)據(jù)類型限定:int unsigned; --無(wú)符號(hào) 從0開(kāi)始
例如:給student表添加一個(gè)height字段 類型為tinyint unsigned類型

alter table student add height tinyint unsigned after id;
Paste_Image.png

插入數(shù)據(jù)
insert into student values(2, 255, 15, 'jim', 78);

Paste_Image.png

查看表結(jié)構(gòu)的時(shí)候,發(fā)現(xiàn)每個(gè)字段的數(shù)據(jù)類型之后都會(huì)自帶一個(gè)括號(hào)暇矫,里面有制定的數(shù)字

Paste_Image.png

顯示寬度:沒(méi)有特別含義主之,只是默認(rèn)告訴用戶可以顯示的形式而已,世界上用戶是可以控制的李根,這種控制不會(huì)改變數(shù)據(jù)的本身大小

顯示寬度的意義:在于當(dāng)前數(shù)據(jù)不夠顯示寬度的時(shí)候槽奕,回自動(dòng)讓數(shù)據(jù)變成顯示寬度
,通常需要搭配一個(gè)前導(dǎo)0來(lái)增加寬度房轿,不改變值大性猎堋:zerofill 零填充

小數(shù)型

小數(shù)型,
SQL中囱持;將小數(shù)細(xì)分為兩種:浮點(diǎn)型和定點(diǎn)型
浮點(diǎn)型:小數(shù)點(diǎn)浮動(dòng) 精度有限 而且會(huì)丟失精度
定點(diǎn)型:小數(shù)點(diǎn)固定夯接,精度固定 不會(huì)丟失精度

####### 浮點(diǎn)型
浮點(diǎn)型數(shù)據(jù)是一種精度典型數(shù)據(jù);以你為超出制定范圍之后洪唐,會(huì)丟失精度(四舍五入)
浮點(diǎn)型:理論分為兩種精度
Float:?jiǎn)尉茸甑牛加?個(gè)字節(jié)存儲(chǔ)數(shù)據(jù),精度范文大概為7位左右
Double:雙精度凭需,占用8個(gè)字節(jié)存儲(chǔ)數(shù)據(jù)问欠,精度范文大概為15位左右

Paste_Image.png

創(chuàng)建浮點(diǎn)數(shù)表:浮點(diǎn)的使用方式,直接float表示沒(méi)有小數(shù)部分粒蜈;float(M,D);M代表總長(zhǎng)度顺献,D代表小數(shù)部分長(zhǎng)度 整數(shù)部分長(zhǎng)度為M-D;

create table my_float(
  f1 float,
  f2 float(10,2),
  f3 float(6,2)
) charset utf8;

定點(diǎn)型:
絕對(duì)的保證整數(shù)部分不會(huì)被四舍五入(不會(huì)丟失精度)枯怖,小數(shù)部分有可能(理論小數(shù)部分也不會(huì)丟失精度)

Paste_Image.png
時(shí)間類型

Datetime:時(shí)間日期是YYYY-mm-dd HH:ii:ss;表示的范圍是從1000年到9999年注整,有0值 0000-00-00 00:00:00
Date:日期 就是datetime中的date部分
Time:時(shí)間(段),制定某個(gè)區(qū)間之間,時(shí)間到-時(shí)間
Timestamp:時(shí)間戳肿轨,并不是時(shí)間錯(cuò)寿冕,并不是時(shí)間戳,只是從1970年開(kāi)始的YYYY-mm-dd HH:ii;ss格式與datetime完全一致
Year:年份 兩種形式 cc:表示1970到 year(4):1901-2156

Paste_Image.png

網(wǎng)站是以PHP為實(shí)現(xiàn)的主要操作對(duì)象:PHP中有非常強(qiáng)大的時(shí)間日期處理函數(shù):date 椒袍,只需要一個(gè)時(shí)間戳就可以轉(zhuǎn)成任意類型的典型的時(shí)間驼唱,以PHP為主的時(shí)候,都是在數(shù)據(jù)庫(kù)使用時(shí)間戳(整形)開(kāi)存儲(chǔ)時(shí)間驹暑;

字符串類型

在MySQL中玫恳,將字符串類型分成了6類:char varchar text blob enum set

  • char 定長(zhǎng)字符串 磁盤(pán)(二維表)在定義結(jié)構(gòu)的時(shí)候就已經(jīng)確定了最終數(shù)據(jù)的存儲(chǔ)長(zhǎng)度
    Char(L):L代表;length 可以存儲(chǔ)的長(zhǎng)度 單位為字符 最大長(zhǎng)度的值可以為255
    Char(4): 在UTF8環(huán)境下优俘,需要4*3=12個(gè)字節(jié)
變長(zhǎng)字符串

變長(zhǎng)字符串:varchar京办,在分配空間的時(shí)候,按照最大的空間分配帆焕,但是實(shí)際上最終用了多少惭婿,是根據(jù)具體的數(shù)據(jù)來(lái)確定

Varchar(L);L表示字符長(zhǎng)度叶雹,理論長(zhǎng)度65536個(gè)字符审孽,但是會(huì)多出1到2個(gè)字節(jié)來(lái)確定存儲(chǔ)的實(shí)際長(zhǎng)度

Varchar(10);的確存了10個(gè)漢字浑娜,utf8環(huán)境,10*3+1 = 31

Paste_Image.png

定長(zhǎng)的磁盤(pán)空間比較浪費(fèi)式散,但是效率高筋遭;如果數(shù)據(jù)基本上確定長(zhǎng)度都一樣,就使用定長(zhǎng)暴拄,如:
身份證 電話號(hào)碼 手機(jī)號(hào)碼等

變成的磁盤(pán)空間比較節(jié)省漓滔,但是效率低; 如果數(shù)據(jù)不能確定長(zhǎng)度(不同數(shù)據(jù)有變化)乖篷;如姓名
地址等

文本字符串

如果數(shù)據(jù)量非常大响驴,通常超過(guò)255個(gè)字符就會(huì)使用文本字符串 分類text 和 blob
Text:存儲(chǔ)文字(二進(jìn)制數(shù)據(jù)實(shí)際都是存儲(chǔ)路徑)
Blob:存儲(chǔ)二進(jìn)制數(shù)據(jù)(通常不用)

枚舉字符串 enum

事先將所有可能出現(xiàn)的結(jié)果都設(shè)計(jì)好,實(shí)際上存儲(chǔ)的數(shù)據(jù)必須是規(guī)定好的數(shù)據(jù)中的一個(gè)

枚舉的使用方式
定義:enum(可能出現(xiàn)的元素); // 比如:
使用:存儲(chǔ)數(shù)據(jù)撕蔼,只能存儲(chǔ)上面的定義好的數(shù)據(jù)

create table my_enum(
  gender enum('男'豁鲤, '女', '保密')
) charset utf8;
-- 插入數(shù)據(jù)
insert into my_enum values('男'), ('保密');

作用二:節(jié)省存儲(chǔ)空間(枚舉通常有一個(gè)別名:?jiǎn)芜x框)枚舉實(shí)際存儲(chǔ)的是數(shù)值而不是字符串本身
在mysql中鲸沮,系統(tǒng)也是自動(dòng)轉(zhuǎn)成數(shù)據(jù)格式琳骡,而且是基本與PHP一樣(尤其是字符串?dāng)?shù)字)

證明字段存儲(chǔ)的數(shù)據(jù)是數(shù)值:將數(shù)據(jù)取出來(lái)+0就可以判斷出原來(lái)的數(shù)據(jù)存儲(chǔ)存儲(chǔ)到底是字符串還是數(shù)值:如果是字符串最終結(jié)果永遠(yuǎn)為0,否則就是其他值讼溺,
枚舉元素實(shí)際規(guī)律:按照元素出現(xiàn)的順序楣号,重1開(kāi)始

列屬性

列屬性:真正約束字段的是數(shù)據(jù)類型,但是數(shù)據(jù)類型,約束很單一炫狱,需要一些額外的約束來(lái)更加保證數(shù)據(jù)的合法性

列屬性有很多: NULL/NOT NULL, default ,Primary key autp_increment, comment

空屬性

兩個(gè)值:NULL(默認(rèn)的)和NOT NULL(不為空)
雖然默認(rèn)的藻懒,數(shù)據(jù)庫(kù)基本都是字段為空 但是實(shí)際上在真是開(kāi)發(fā)的時(shí)候,盡可能的要保證所有的數(shù)據(jù)都不應(yīng)該為空视译;空數(shù)據(jù)沒(méi)有意義嬉荆,空數(shù)據(jù)沒(méi)法參與運(yùn)算

create table my_class(
  name varchar(10) not null,
  room varchar(10)
) charset utf8;
Paste_Image.png
列描述

列描述:comment 描述 沒(méi)有實(shí)際含義:是專門(mén)用來(lái)描述字段,會(huì)根據(jù)表創(chuàng)建語(yǔ)句保存憎亚;用來(lái)給程序員(數(shù)據(jù)庫(kù)管理員)進(jìn)行了解的员寇。

create table my_teacher(
  name varchar(20)  not null comment  '姓名',
  money decimal(10, 2) comment  '工資'
) charset utf8;
Paste_Image.png
默認(rèn)值

默認(rèn)值:某一種數(shù)據(jù)會(huì)經(jīng)常性的出現(xiàn)某個(gè)具體的值,可以一開(kāi)始就制定好第美,在需要真實(shí)數(shù)據(jù)結(jié)構(gòu)蝶锋,用戶可以選擇性的使用默認(rèn)值
默認(rèn)值關(guān)鍵之:default

create table my_default(
  name varchar(20) not null,
  age tinyint unsigned default 0,
  gender enum('男', '女', '保密') default '男'
)charset utf8;
Paste_Image.png
主鍵

主鍵:primary key 一張表中只能有一個(gè)字段可以使用對(duì)應(yīng)的鍵,用來(lái)唯一的約束該字段里面的數(shù)據(jù)什往,不能重復(fù):這種稱之為主鍵

一張表中只能最多有一個(gè)主鍵
主鍵默認(rèn)不能為空

  • 增加主鍵
    SQL操作有多中方式可以給表增加主鍵:大體分為三種
    方案1:在創(chuàng)建表的時(shí)候扳缕,直接在在字段之后,跟上primary key關(guān)鍵字
create table my_pril(
  name varchar(20) not null comment '姓名',
  number char(10) primary key comment '學(xué)號(hào):'
) charset utf8;
Paste_Image.png

方案2:在創(chuàng)建表得時(shí)候别威,在所有的字段之后躯舔,使用primary key(主鍵字段列表)來(lái)創(chuàng)建主鍵(如果有多個(gè)字段作為主鍵,可以是復(fù)合主鍵)

create table my_pri2(
   number char(10) comment '學(xué)號(hào)'省古,
   course char(10) comment '課程代碼',
  score tinyint unsigned default 60 comment '成績(jī)',
-- 增加主鍵限制:學(xué)號(hào)和 課程應(yīng)該是個(gè)對(duì)應(yīng)的粥庄,具有唯一性
  primary key (number, course)(復(fù)合主鍵)
)charset  utf8;

方案3;當(dāng)表已經(jīng)創(chuàng)建好了之后豺妓,再次額外追加主鍵惜互,可以通過(guò)修改字段屬性,也可以直接追加

Alter table 表名 add primary key(字段列表);
create table my_pri3(
  course char(10) not null comment '課程編號(hào)',
  name carchar(10) not null comment '課程名字'
) charset utf8;

追加主鍵
alter table my_pri3  modify course char(10) primary key comment '課程名字';
alter table my_pri3 add primary key (course);
Paste_Image.png
主鍵約束

主鍵對(duì)應(yīng)的字段

  • 更新主鍵&& 刪除主鍵
Alter table 表名 drop primary key;
Paste_Image.png
  • 主鍵的分類
    實(shí)際創(chuàng)建表的過(guò)程中琳拭,我們很少使用真實(shí)的業(yè)務(wù)數(shù)據(jù)作為主鍵字段(業(yè)務(wù)主鍵);
    大部分的時(shí)候是使用邏輯性的字段(字段沒(méi)有業(yè)務(wù)含義训堆,值是什么都沒(méi)有關(guān)系),將這種字段稱之為邏輯主鍵
Create table my_student(
  id int primary key auto_increment ‘邏輯主鍵白嘁,自增長(zhǎng)’,
  Number char(10) not null comment ‘學(xué)號(hào)’,
  name carchar(10) not null
);
  • 自動(dòng)增長(zhǎng)
    自增長(zhǎng):當(dāng)前對(duì)應(yīng)的字段坑鱼,不給值,或者說(shuō)給默認(rèn)值絮缅,或者給NULL的時(shí)候鲁沥,會(huì)自動(dòng)的被系統(tǒng)觸發(fā),系統(tǒng)會(huì)從當(dāng)前字段中已有的最大值進(jìn)行+1操作耕魄,得到一個(gè)新的在不同字段

自增長(zhǎng)通常跟主鍵搭配
自增長(zhǎng)特點(diǎn): auto_increment
1.任何一個(gè)字段要做自增長(zhǎng)要做自增長(zhǎng)必須前提本身就是一個(gè)索引(key -欄有值)
2.自增長(zhǎng)必須是數(shù)字(增長(zhǎng))
3.一張表最多有一個(gè)主鍵

  • 自增長(zhǎng)的使用
    當(dāng)自增被給定的值為NULL 或者默認(rèn)值得時(shí)候黍析,會(huì)觸發(fā)自動(dòng)增長(zhǎng)

自增長(zhǎng) 如果對(duì)應(yīng)的字段輸入了值,那么自增長(zhǎng)失效:但是下一次還是能夠正確的自增長(zhǎng)(從最大值+1)

如何確定下一次是什么自增長(zhǎng)恩屎开?可以通過(guò)查看表創(chuàng)建語(yǔ)句看到阐枣;

Paste_Image.png
  • 修改自增長(zhǎng)
    1.自增長(zhǎng)如果是涉及到字段改變马靠,必須先刪除自增長(zhǎng)后增加(一個(gè)表只能有一個(gè)自增長(zhǎng))
    2.修改當(dāng)前自增長(zhǎng)已經(jīng)存在的值:修改只能比當(dāng)前已有的自增長(zhǎng)的最大值大(小不生效
alter table 表名 auto_increment = 值;

思考:為什么自增長(zhǎng)從1開(kāi)始蔼两?為什么每次都是自增1呢甩鳄?
所有的系統(tǒng)表現(xiàn)(如字符集,校隊(duì)集)都是有系統(tǒng)內(nèi)部的變量進(jìn)行控制的

show variables like 'auto_increment%';

Paste_Image.png
  • 刪除自增長(zhǎng)
    自增長(zhǎng)是字段的一個(gè)屬性:可以通過(guò)modify來(lái)修改(保證字段沒(méi)有auto_crement即可)
Alter table 表名 modify 字段 類型;
Paste_Image.png
唯一鍵

一張表中往往有很多字段需要具有唯一性额划,數(shù)據(jù)不能重復(fù):但是一張表中只能有一個(gè)主鍵:(unique key) 就可以解決多個(gè)字段需要唯一性約束的問(wèn)題妙啃;

唯一鍵的本質(zhì)與主鍵差不多:唯一鍵默認(rèn)的允許自動(dòng)為空,而且可以多個(gè)為空(空字段不參與唯一性比較)

  • 增加唯一鍵
    基本與主鍵差不多
    方案1:在創(chuàng)建表的時(shí)候直接跟unique俊戳、unique key
create table my_unique1(
  number char(10) unique comment ‘學(xué)號(hào)唯一揖赴,允許為空’,
  name varchar(10) not null 
) charset utf8;

方案2.在所有的字段之后增加unique key(字段列表)抑胎; --復(fù)合唯一鍵

方案3.在創(chuàng)建表之后增加唯一鍵

create table my_unique3(
    id int primary key auto_increment,
    number char(10) not null,
    name varchar(20) not null 
)charset utf8;
追加唯一鍵
alter table my_unique3 add unique key(number);

如果唯一鍵也不允許為空:與主鍵的作用是一致的

  • 更新唯一鍵 &&刪除唯一鍵
    更新唯一鍵:先刪除 后新增(唯一鍵可以有多個(gè)燥滑,可以不刪除)
alter table 表名 drop unique key; -- 錯(cuò)誤的  因?yàn)槲ㄒ绘I有多個(gè)

Alter table 表名 drop index 索引名字;

Paste_Image.png
索引

幾乎所有的都是建立在字段之上
索引:系統(tǒng)根據(jù)某種算法阿逃,將已有的數(shù)據(jù)(未來(lái)可能新增的數(shù)據(jù))铭拧,單獨(dú)建立一個(gè)文件,文件能夠?qū)崿F(xiàn)快速匹配恃锉,并且能夠快速找到對(duì)應(yīng)表中的記錄搀菩;

索引的意義:
1.提升查詢數(shù)據(jù)的效率
2.約束數(shù)據(jù)的有效性(唯一性等)

增加索引的前提條件:索引本身會(huì)產(chǎn)生索引文件(有時(shí)候可能比數(shù)據(jù)文件還大),會(huì)消耗磁盤(pán)空間

如果某個(gè)字段需要`作為查詢條件`經(jīng)常使用破托,那么可以使用索引(一定想辦法增加)肪跋;
若果某個(gè)字段需要進(jìn)行數(shù)據(jù)有效的約束,也可能使用索引(主鍵土砂,唯一鍵)

MySQL中提供了多重索引
1.主鍵索引:primary key
2.唯一鍵索引: unique key
3.全文索引: fulltext index
4.普通索引: index

全文索引:針對(duì)文章內(nèi)部的關(guān)鍵字進(jìn)行索引
全文索引最大的問(wèn)題:在于如何確定關(guān)鍵字

英文和容易:英文單詞之間與打次之間有空格
中文很難: 沒(méi)有空格澎嚣, 而且中文可以各種隨意組合(分詞 sphinx)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市瘟芝,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌褥琐,老刑警劉巖锌俱,帶你破解...
    沈念sama閱讀 217,185評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異敌呈,居然都是意外死亡贸宏,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門(mén)磕洪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)吭练,“玉大人,你說(shuō)我怎么就攤上這事析显■暄剩” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,524評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)分尸。 經(jīng)常有香客問(wèn)我锦聊,道長(zhǎng),這世上最難降的妖魔是什么箩绍? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,339評(píng)論 1 293
  • 正文 為了忘掉前任孔庭,我火速辦了婚禮,結(jié)果婚禮上材蛛,老公的妹妹穿的比我還像新娘圆到。我一直安慰自己,他們只是感情好卑吭,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評(píng)論 6 391
  • 文/花漫 我一把揭開(kāi)白布芽淡。 她就那樣靜靜地躺著,像睡著了一般陨簇。 火紅的嫁衣襯著肌膚如雪吐绵。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,287評(píng)論 1 301
  • 那天河绽,我揣著相機(jī)與錄音己单,去河邊找鬼。 笑死耙饰,一個(gè)胖子當(dāng)著我的面吹牛纹笼,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播苟跪,決...
    沈念sama閱讀 40,130評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼廷痘,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了件已?” 一聲冷哼從身側(cè)響起笋额,我...
    開(kāi)封第一講書(shū)人閱讀 38,985評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎篷扩,沒(méi)想到半個(gè)月后兄猩,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,420評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡鉴未,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評(píng)論 3 334
  • 正文 我和宋清朗相戀三年枢冤,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片铜秆。...
    茶點(diǎn)故事閱讀 39,779評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡淹真,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出连茧,到底是詐尸還是另有隱情核蘸,我是刑警寧澤巍糯,帶...
    沈念sama閱讀 35,477評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站值纱,受9級(jí)特大地震影響鳞贷,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜虐唠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評(píng)論 3 328
  • 文/蒙蒙 一搀愧、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧疆偿,春花似錦咱筛、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,716評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至处铛,卻和暖如春饲趋,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背撤蟆。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,857評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工奕塑, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人家肯。 一個(gè)月前我還...
    沈念sama閱讀 47,876評(píng)論 2 370
  • 正文 我出身青樓龄砰,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親讨衣。 傳聞我的和親對(duì)象是個(gè)殘疾皇子换棚,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評(píng)論 2 354

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