數據類型和約束
學習目標
- 能夠知道數據類型和數據約束的作用
大家都知道數據庫中的數據保存在數據表中,在表中爲了更加準確的存儲數據,保證數據的正確有效,可以在創建表的時候,爲表添加一些強制性的驗證,比如:數據類型和約束。
1. 數據類型
數據類型是指在創建表的時候爲表中字段指定數據類型,只有數據符合類型要求才能存儲起來,使用數據類型的原則是:夠用就行,儘量使用取值範圍小的,而不用大的,這樣可以更多的節省存儲空間。
常用數據類型如下:
- 整數:int,bit
- 小數:decimal
- 字符串:varchar,char
- 日期時間: date, time, datetime
- 枚舉類型(enum)
數據類型說明:
- decimal表示浮點數,如 decimal(5, 2) 表示共存5位數,小數佔 2 位.
- char表示固定長度的字符串,如char(3),如果填充’ab’時會補一個空格爲’ab ',3表示字符數
- varchar表示可變長度的字符串,如varchar(3),填充’ab’時就會存儲’ab’,3表示字符數
- 對於圖片、音頻、視頻等文件,不存儲在數據庫中,而是上傳到某個服務器上,然後在表中存儲這個文件的保存路徑.
- 字符串 text 表示存儲大文本,當字符大於 4000 時推薦使用, 比如技術博客.
2. 數據約束
約束是指數據在數據類型限定的基礎上額外增加的要求.
常見的約束如下:
- 主鍵 primary key: 物理上存儲的順序. MySQL 建議所有表的主鍵字段都叫 id, 類型爲 int unsigned.
- 非空 not null: 此字段不允許填寫空值.
- 惟一 unique: 此字段的值不允許重複.
- 默認 default: 當不填寫字段對應的值會使用默認值,如果填寫時以填寫爲準.
- 外鍵 foreign key: 對關係字段進行約束, 當爲關係字段填寫值時, 會到關聯的表中查詢此值是否存在, 如果存在則填寫成功, 如果不存在則填寫失敗並拋出異常.
3. 數據類型附錄表
1. 整數類型
類型 | 字節大小 | 有符號範圍(Signed) | 無符號範圍(Unsigned) |
---|---|---|---|
TINYINT | 1 | -128 ~ 127 | 0 ~ 255 |
SMALLINT | 2 | -32768 ~ 32767 | 0 ~ 65535 |
MEDIUMINT | 3 | -8388608 ~ 8388607 | 0 ~ 16777215 |
INT/INTEGER | 4 | -2147483648 ~2147483647 | 0 ~ 4294967295 |
BIGINT | 8 | -9223372036854775808 ~ 9223372036854775807 | 0 ~ 18446744073709551615 |
2. 字符串
類型 | 說明 | 使用場景 |
---|---|---|
CHAR | 固定長度,小型數據 | 身份證號、手機號、電話、密碼 |
VARCHAR | 可變長度,小型數據 | 姓名、地址、品牌、型號 |
TEXT | 可變長度,字符個數大於 4000 | 存儲小型文章或者新聞 |
LONGTEXT | 可變長度, 極大型文本數據 | 存儲極大型文本數據 |
3. 時間類型
類型 | 字節大小 | 示例 |
---|---|---|
DATE | 4 | ‘2020-01-01’ |
TIME | 3 | ‘12:29:59’ |
DATETIME | 8 | ‘2020-01-01 12:29:59’ |
YEAR | 1 | ‘2017’ |
TIMESTAMP | 4 | ‘1970-01-01 00:00:01’ UTC ~ ‘2038-01-01 00:00:01’ UTC |
4. 小結
- 常用的數據類型:
- 整數:int,bit
- 小數:decimal
- 字符串:varchar,char
- 日期時間: date, time, datetime
- 枚舉類型(enum)
- 常見的約束:
- 主鍵約束 primary key
- 非空約束 not null
- 惟一約束 unique
- 默認約束 default
- 外鍵約束 foreign key
- 數據類型和約束保證了表中數據的準確性和完整性