MYSQL數據庫的數據完整性
阿新 • • 發佈:2018-09-01
狀態 應該 而是 key har tin 增刪 mint unsigned
數據庫中存儲的數據應該符合我們的預期, 這就是數據完整性. 那麽如何實現數據完整性?
我們通過以下兩方面來實現數據的完整性:
- 數據類型: 存儲在數據庫中的所有數據值均正確的狀態。如果數據庫中存儲有不正確的數據值,則該數據庫稱為已喪失數據完整性。
- 數據約束: 在數據類型限定的基礎上, 添加的額外的要求。
一、數據類型
數據類型影響著數據中存儲的數據所占的對數據進行最基本的類型約束、空間大小.
- 只有類型符合要求的數據才能存儲起來 這就是對數據完整性的一種要求.
- 使用數據類型的原則是:夠用就行,盡量使用取值範圍小的,而不用大的,這樣可以更多的節省存儲空間
常用的數據類型如下:
- 整數:int,bit
- 小數:decimal
- 字符串:varchar,char
- 日期時間: date, time, datetime
- 枚舉類型(enum)
特別說明的類型如下:
- decimal表示浮點數,如 decimal(5, 2) 表示共存5位數,小數占 2 位.
- char表示固定長度的字符串,如char(3),如果填充‘ab‘時會補一個空格為
‘ab ‘
. - varchar表示可變長度的字符串,如varchar(3),填充‘ab‘時就會存儲‘ab‘
- 對於圖片、音頻、視頻等文件,不存儲在數據庫中,而是上傳到某個服務器上,然後在表中存儲這個文件的保存路徑
- 字符串 text 表示存儲大文本,當字符大於 4000 時推薦使用, 比如博客
二、數據約束
約束本質上是對數據在數據類型限定的基礎上添加的額外的要求.
常見的約束如下:
- 主鍵 primary key: 用於唯一標識一條記錄. MySQL 建議所有表的主鍵字段都叫 id, 類型為 int unsigned.
- 非空 not null: 此字段不允許填寫空值.
- 惟一 unique: 此字段的值不允許重復.
- 默認 default: 當不填寫字段對應的值會使用默認值,如果填寫時以填寫為準.
- 外鍵 foreign key: 對關系字段進行約束, 當為關系字段填寫值時, 會到關聯的表中查詢此值是否存在, 如果存在則填寫成功, 如果不存在則填寫失敗並拋出異常.
說明:雖然外鍵約束可以保證數據的有效性, 在進行數據的 crud(增刪改查), 會降低數據庫的性能, 此種情況下不推薦使用
最後附上常見的數據類型表
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 | 0-255 | 類型:char(3) 輸入 ‘ab‘, 實際存儲為‘ab ‘, 輸入‘abcd‘ 實際存儲為 ‘abc‘ |
VARCHAR | 0-255 | 類型:varchar(3) 輸 ‘ab‘,實際存儲為‘ab‘, 輸入‘abcd‘,實際存儲為‘abc‘ |
TEXT | 0-65535 | 大文本 |
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 |
MYSQL數據庫的數據完整性