本文目錄
一、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的區別:
- char(4) 給你四個空間,你存了一個空間,還是佔用四個空間,char最長不超過255。
- 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個字節 |
-
datetime和date
datetime格式:( YYYY-MM-DD hh:mm:ss )
年·月·日 小時:分鐘:秒。date格式:(YYYY-MM-DD) -
timestamp(時間戳)
datetime類型和timestamp類型表現上是一樣的,他們的區別在於:
datetime從1000到9999,而timestamp從1970年~2038(timestamp佔用4個字節,和整型的範圍一樣,2038年01月19日11:14:07以後的描述就超過了4個字節的長度)
-
year
只能表示1901~2155之間的年份,因爲只佔用1個字節,只能表示255個數
-
time
表示時間,也可以表示時間間隔,範圍是: -838:59:59 ~ 838:59:59
time支持以天的方式來表示時間間隔:
1.7 布爾型
MySQL不支持布爾型,但是true和false在數據庫中對應的是1和0。
1.8 練習題
- 電話號碼一般使用什麼數據類型存儲?
varchar,數字類不進行計算的一般用varchar - 手機號碼用什麼數據類型?
char,定長 - 性別一般使用什麼數據類型存儲?
char, tinyint,enum都可以 - 人的年齡信息一般使用什麼數據類型?
tinyint - 照片信息一般使用什麼數據類型存儲?
binary,不過我們在實際中一般存儲照片的地址,varchar。 - 薪水一般使用什麼數據類型存儲?
decimal
二、MySQL列屬性
2.1 是否爲空
null 表示字段值可以爲空
not null 表示字段不能爲空
2.2 默認值(default)
如果一個字段沒有插入值,可以默認設置一個指定值。
2.3 自動增長(auto_increment)
字段值從1開始,每次遞增1,自動增長的值就不會有重複,適合用來生成唯一的id,在MySQL中只要是自動增長列必須是主鍵。
2.4 主鍵(primary key)
主鍵:唯一標識表中的記錄的一個或一組列稱爲主鍵。
主鍵的特點:主鍵不能爲空,不能重複,一個表只能有一個主鍵。
作用:
- 保證數據的完整性。
- 加快查詢的速度。
選擇主鍵的原則
最少性:儘量選擇單個建作爲主鍵。
穩定性:儘量選擇數值更新少的列作爲主鍵。
添加主鍵:
刪除主鍵:
添加主鍵數據:
當主鍵重複會報錯,當設置的主鍵爲auto_increment寫入null後會自動增長,每次加1。
需要注意的是,當我們刪除一個字段後,重新再添加一個字段,那麼這個id會在原來被刪除的主鍵上加1,例:
如果是truncate刪除的話,那麼重新插入數據,主鍵會從1開始:
2.5 唯一鍵(unique)
唯一鍵:
- 不能重複,可以爲空。
- 一個表可以有多個唯一鍵。
例:
添加唯一鍵的寫法和添加主鍵的寫法一樣,只不過 primary key 改爲unique。例:
刪除唯一鍵,由於唯一鍵可能有多個,所以不能想主鍵那樣直接去刪除,是通過唯一鍵的名字去刪除唯一鍵。
語法show create table 表名\G
查看唯一鍵名字:
然後通過alter table 表名 drop index 唯一鍵名字;
:
2.6 備註(comment)
給每個字段,一個說明性文本。
在學習的MySQL的路上,如果你覺得本文對你有所幫助的話,那就請關注點贊評論三連吧,謝謝,你的肯定是我寫博的另一個支持。