Mysql 常見數據類型及約束 最近在跟幾個不太懂技術的同事(哈哈, 其實我也不懂), 要整一個資料庫項目, 然後前端, 後端, 都沒有像樣的, 數據輸出還不是由我們控制.... 這可難受了, 然後總數被圍繞著, 怎麼導入數據, 導出EXCEL .... 之類的, 或者是說導入數據不方便, 怎麼欄位 ...
Mysql 常見數據類型及約束
最近在跟幾個不太懂技術的同事(哈哈, 其實我也不懂), 要整一個資料庫項目, 然後前端, 後端, 都沒有像樣的, 數據輸出還不是由我們控制....
這可難受了, 然後總數被圍繞著, 怎麼導入數據, 導出EXCEL .... 之類的, 或者是說導入數據不方便, 怎麼欄位還要有類型.... 每至於此, 我其實內心是崩潰的, 但非常理解. 不理解, 還能怎麼辦呢.(當然, 開個玩笑)
這裡引出一個問題, 為啥要舌設置類型以及約束? 因為數據類型影響著數據存儲的資源占用空間和保證數據的完整性. 經常讓我頭疼的是, 拿到一些都是公式嵌套的Excel表, 一打開, 該進程直接涼涼, 或者是表沒有唯一標識, 或是欄位總在變化, 這可讓我難受壞了, so, 規則的約定是非常重要的呀, 於是找了一些常用的, 做一個簡單記錄.
小結: 數據類型是為了"節約記憶體,提高計算", 數據約束是為了, 完整性(存儲關係).
數據類型
常用數據類型
- 整數: tinyint, smallint(2, 無符號, 0-32367), mediumint (3, 8388607), int...
- 小數: decimal, float, double..
- 字元串: char, varchar, text...
- 時間日期: date, time, datetime
- 枚舉型: enum
- decimal 表示浮點數, 如decimal(5,2)表示一個有5位數, 小數占2位
- char 表示固定長度的字元串, 如char(5), 如果值是"yg", 則會自動補齊空格
- varchar表可變長度字元串, 如, varchar(5), 值為"yg",則存儲的仍是'yg'
- text 表示存大文本, 一種說法是說, 字元大於4000時才會用
常見數據約束
Primary key: 物理上的存儲順序, 主鍵, 一個表設置id欄位, 類型為 int unsigned.
- Not null: 該欄位不允許空值.
- Unique: 該欄位不允許值重覆.
- Default: 給該欄位給定一個預設值.
Foreign key: 表之間的"溝通"欄位, 在insert 和delete是都要先在關聯表中查詢.
雖然外鍵約束可以保證數據的有效性, 做開發時也非常方便, 但在增刪查改時, 會降低資料庫性能, 不能隨意增刪數據(好比excel的數據嵌套了其它表), 操作上的確有些難受.
附-數據類型(常用)
整數類型
類型 | 位元組 | Signed | Unsigned |
---|---|---|---|
tinyint | 1 | -128 ~ 127 | 0 ~ 255 |
smallint | 2 | -32768 ~ 32767 | 0 ~ 65535 |
mediumint | 3 | -838 8608 ~ 838 8608 | 0 ~ 1677 7215 |
int | 4 | -21 4748 3648 ~ 21億 | 0 ~ 42億 |
bigint | 8 | 很大 | 0 ~ 真的大 |
字元串
類型 | 位元組 |
---|---|
char | 0 ~ 65535 |
varchar | 0 ~ 65535 |
text | 0 ~ 很大 |
效率來說基本是char>varchar>text,但是如果使用的是Innodb引擎的話,推薦使用varchar代替char。
char和varchar可以有預設值,text不能指定預設值。
資料庫選擇合適的數據類型存儲還是很有必要的,對性能有一定影響. 對於int類型的,如果不需要存取負值,最好加上unsigned;對於經常出現在where語句中的欄位,考慮加索引,整形的尤其適合加索引。
日期時間類型
類型 | 位元組 | 演示 |
---|---|---|
date | 4 | "2020-01-01" |
time | 3 | "12:56:49" |
datetime | 8 | "2020-01-01 12:12:12" |
year | 1 | '2020' |
timestamp | 4 | 2019-10-05 22:21:23 |
小結
數據類型是為了"節約記憶體,提高計算", 數據約束是為了, 完整性(存儲關係).
- Mysql常用的數據類型: bit, int; decimal, float; char, varchar; date, time, date time; enum...
儘量使用占位空間小的類型, 同時為提高查詢效率, 可建立合適的索引.
Mysql常見欄位約束: Primary key; Not null; Unique; Default; Foreign key.