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.
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/236426.html
標籤:其他
