幼師女友突然想學MySQL,我給她寫了筆記MySQL的學習入門三

一、MySQL數據類型

MySQL中的數據類型是強類型。

1.1 數值型

1、整型

整型 佔用字節數 範圍
整型 佔用字節數 範圍
tinyint 1 -128 ~ 127(-2^7 ~ 2^8 - 1
smallint 2 -32768 ~ 32767(-2^15 ~ 2^16 - 1
mediumint 3 -8388608 ~ 8388607(-2^23 ~ 2^24 - 1
int 4 -2147483648 ~ 2147483647(-2^31 ~ 2^32 - 1
bigint 8 -9223372036854775808 ~ 92233720368547758087(-2^63 ~ 2^64 - 1

例,一個班級的學生數,我們可以直接使用tinyint,因爲正常不超過127,我們就儘可能範圍設置小。範圍越小佔用資源越少。
在這裏插入圖片描述

2、無符號整型
無符號整型(unsigned )就是沒有負數,無符號整數是整數的兩倍。例:
在這裏插入圖片描述
我們修改表字段屬性,改爲無符號整型,可以看到可以存儲原來整型的兩倍。
可以看到表中tinyint(3)那麼這個3是什麼意思呢,其實是這個整型支持最小顯示寬度,如果位數不足用0填充。顯示寬度默認不起作用,例:
在這裏插入圖片描述
那可以明顯的看到這邊位數不足3,可是也沒有0填充,那是必須結合zerofill才起作用:
在這裏插入圖片描述

1.2 浮點型

浮點型 佔用字節數 範圍
float (單精度型) 4 -3.4E + 38 ~ 3.4E+38
double (雙精度型) 8 -1.8E + 308 ~ 1.8E + 308

1、浮點型的聲明:float(M, D), double(M, D)

M: 總位數 D: 小數位數
在這裏插入圖片描述

如果不指定小數位數,float (單精度型) 默認是小數點後面6位,double (雙精度型) 默認是小數點後面17位,

2、小數(定點數)
原理,將整數和小數部分分開存儲。
語法: decimal(M, D)
例:
在這裏插入圖片描述

1.3 字符型

在數據庫中沒有字符串的概念,只有字符。

數據類型 描述
char 定長字符
varchar 可變長度字符
tinytext 2^8-1 = 255
text 2^16 - 1 = 65535
mediumtext 2^24 - 1
longtext 2^32 - 1

char和varchar的區別:

  1. char(4) 給你四個空間,你存了一個空間,還是佔用四個空間,char最長不超過255。
  2. varchar(4) 如果存2個空間,那麼會回收2個空間,varchar理論上最長65536,但實際上達不到,因爲有的字符是多字節字符。char(4)和varchar(4)都不能超過4。例:

在utf8編碼下,一個字節佔用3個字符:
在這裏插入圖片描述
在gbk編碼下,一個字節佔用2個字符:
在這裏插入圖片描述
一個表記錄的所有字段的總長度不能超過65535個字節,text數據類型不受此限制。

1.4 枚舉類型(enum)

從集合中只能選擇一個值作爲數據。
例:
在這裏插入圖片描述
可以看到約束數據。只能選擇其中的一種。

枚舉型是通過整型數字來管理的,從1開始,依次加1遞增。例:
在這裏插入圖片描述

1.5 集合類型(set)

從集合中可以選擇多個值作爲數據。
在這裏插入圖片描述
插入的順序不一樣,但是顯示的順序按原來設置集合的順序。

那麼可以試試如果插入的值不在範圍內:
在這裏插入圖片描述
可以發現報錯了。
集合和枚舉一樣都是給每個元素分配一個固定的值,分配規則:從前往後以2的0,1,2,3,4,…次方。
例:
在這裏插入圖片描述
可以發現:

PHP JAVA Vue
1 2 4

所以加起來就是7。

1.6 日期類型

數據類型 描述
datetime 日期時間,佔8個字節 (YYYY-MM-DD hh:mm:ss)範圍(1000-01-01 00:00:00 ~ 9999-12-31 23:59:59)
date 日期佔用3個字節 (YYYY-MM-DD)
time 時間佔用3個字節
year 年份佔用1個字節
timestamp 時間戳,佔用4個字節
  1. datetime和date
    datetime格式:( YYYY-MM-DD hh:mm:ss )
    年·月·日 小時:分鐘:秒。date格式:(YYYY-MM-DD)在這裏插入圖片描述

  2. timestamp(時間戳)
    datetime類型和timestamp類型表現上是一樣的,他們的區別在於:
    datetime從1000到9999,而timestamp從1970年~2038(timestamp佔用4個字節,和整型的範圍一樣,2038年01月19日11:14:07以後的描述就超過了4個字節的長度)
    在這裏插入圖片描述

  3. year
    只能表示1901~2155之間的年份,因爲只佔用1個字節,只能表示255個數
    在這裏插入圖片描述

  4. time
    表示時間,也可以表示時間間隔,範圍是: -838:59:59 ~ 838:59:59
    在這裏插入圖片描述
    time支持以天的方式來表示時間間隔:
    在這裏插入圖片描述

1.7 布爾型

MySQL不支持布爾型,但是true和false在數據庫中對應的是1和0。
在這裏插入圖片描述

1.8 練習題

  1. 電話號碼一般使用什麼數據類型存儲?
    varchar,數字類不進行計算的一般用varchar
  2. 手機號碼用什麼數據類型?
    char,定長
  3. 性別一般使用什麼數據類型存儲?
    char, tinyint,enum都可以
  4. 人的年齡信息一般使用什麼數據類型?
    tinyint
  5. 照片信息一般使用什麼數據類型存儲?
    binary,不過我們在實際中一般存儲照片的地址,varchar。
  6. 薪水一般使用什麼數據類型存儲?
    decimal

二、MySQL列屬性

2.1 是否爲空

null 表示字段值可以爲空
not null 表示字段不能爲空

2.2 默認值(default)

如果一個字段沒有插入值,可以默認設置一個指定值。
在這裏插入圖片描述

2.3 自動增長(auto_increment)

字段值從1開始,每次遞增1,自動增長的值就不會有重複,適合用來生成唯一的id,在MySQL中只要是自動增長列必須是主鍵。

在這裏插入圖片描述在這裏插入圖片描述

2.4 主鍵(primary key)

主鍵:唯一標識表中的記錄的一個或一組列稱爲主鍵。
主鍵的特點:主鍵不能爲空,不能重複,一個表只能有一個主鍵。
作用:

  1. 保證數據的完整性。
  2. 加快查詢的速度。

選擇主鍵的原則
最少性:儘量選擇單個建作爲主鍵。
穩定性:儘量選擇數值更新少的列作爲主鍵。
添加主鍵:
在這裏插入圖片描述
刪除主鍵:
在這裏插入圖片描述
添加主鍵數據:
在這裏插入圖片描述
當主鍵重複會報錯,當設置的主鍵爲auto_increment寫入null後會自動增長,每次加1。
需要注意的是,當我們刪除一個字段後,重新再添加一個字段,那麼這個id會在原來被刪除的主鍵上加1,例:
在這裏插入圖片描述
如果是truncate刪除的話,那麼重新插入數據,主鍵會從1開始:
在這裏插入圖片描述

2.5 唯一鍵(unique)

唯一鍵:

  1. 不能重複,可以爲空。
  2. 一個表可以有多個唯一鍵。
    例:
    在這裏插入圖片描述
    添加唯一鍵的寫法和添加主鍵的寫法一樣,只不過 primary key 改爲unique。例:
    在這裏插入圖片描述
    刪除唯一鍵,由於唯一鍵可能有多個,所以不能想主鍵那樣直接去刪除,是通過唯一鍵的名字去刪除唯一鍵。
    語法 show create table 表名\G 查看唯一鍵名字:
    在這裏插入圖片描述
    然後通過 alter table 表名 drop index 唯一鍵名字;
    在這裏插入圖片描述

2.6 備註(comment)

給每個字段,一個說明性文本。
在這裏插入圖片描述
在這裏插入圖片描述

在學習的MySQL的路上,如果你覺得本文對你有所幫助的話,那就請關注點贊評論三連吧,謝謝,你的肯定是我寫博的另一個支持。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章