mysql数据库约束无符号,MySQL所支持的数据类型与表字段约束类型的学习教程
MySQL 數據(字段)類型
在創建表的時候,要明確定義字段對應的數據類型。MySQL 主要的數據類型分為數值類型、字符串(文本)類型、時間日期類型和其他類型幾類。
數值類型
數值類型說明:
補充說明
在 int(integer) 系列中,只能存儲整型值,且可以在后面用括號指定顯示的尺寸(M),如果不指定則會默認分配。如果實際值的顯示寬度大于設定值,將會顯示實際值而不會截斷以適應顯示尺寸。如 smallint(3) 中的 3 即為顯示尺寸,即顯示三位的數值(不包括 - 號)
int 類型可以指定 UNSIGNED 屬性,即無符號(非負),所以存儲范圍有兩種
在 float、double 及 decimal 類型中,不能指定 UNSIGNED 屬性,其顯示尺寸包含了小數點精度(D),即 float(3,1) 保存范圍為 -99.9 至 99.9
decimal 必須指定顯示尺寸(M)和小數點精度(D),float 和 double 都是可選的
在可能涵蓋取值范圍的基礎上,盡可能選擇較小的類型以提高效率和節約存儲空間,如年齡,就選擇 tinyint(3) 。該原則對于字符類型同樣適用
字符串(文本)類型
字符串(文本)類型說明:
補充說明
char 和 varcha 需要指定長度,不同的是,char 存儲時總是按照指定的長度儲存,而 varchar 則根據實際字符串長度再加上一個字節分配空間。
時間日期類型
時間日期類型說明:
提示
在 PHP 中,一般情況下對于時間都是按照 UNIX 時間戳以 int 類型存儲于表中,再根據實際需要用 PHP 的時間函數進行處理,但不完全都是這樣。
MySQL 表字段屬性
主鍵
表的主鍵(primary key,主關鍵字)是表中的一個或多個字段,它的值用于惟一地標識表中的某一條記錄。一個表不能有多個主關鍵字,并且主關鍵字的列不能包含空值和重復值。主關鍵字是可選的,并且可在 CREATE TABLE 或 ALTER TABLE 語句中定義。
語法:
PRIMARY KEY (column_name)
在這個表中,uid 這個字段就是該表的主鍵。
建立主鍵應該遵循的一般原則
主鍵應當是對用戶沒有意義的
永遠也不要更新主鍵,如果主鍵需要更新,則說明主鍵應對用戶無意義的原則被違反了
主鍵不應包含動態變化的數據,如時間戳、創建時間等
主鍵應當由系統自動生成
外鍵
在兩個表的關系中,當一張表(如表A )的主關鍵字被包含在另一張表(如表B)中時,A 表中的主關鍵字便成為 B 表的外鍵(外關鍵字)。B 表稱為主表,A 表稱為從表。
外鍵主要用于保持數據一致性,完整性,避免冗余數據,使兩張或多張表形成關聯。
在這個文章評論表 comment 樣例中,uid 便是外鍵,它是 user 表的主鍵。在該表中記錄了用戶對文章的評論,關于用戶信息,只需對應 user 表的主鍵 uid 即可。在數據一致性方面,比如當 comment 表沒有 uid 為 3 的評論后,才可以刪除 user 表中 uid = 3 的記錄。
自動遞增
在 MySQL 數據庫中,提供了字段的自動遞增(AUTO_INCREMENT)屬性,即將該字段設置為 int 類的數據類型,每向數據表添加一條記錄,該字段的值會自動加1 。設置了自動遞增后,該列不用再設置默認值和唯一性約束。
例子:
?
非空
因為邏輯上的一些要求,有時候需要把字段屬性設置為非空(NOT NULL),如記錄用戶名、密碼等非空值的字段。
設置為非空的列,雖然不是必須,但最好設定一個默認值,以防止意外的錯誤和減少增加數據時的 SQL 語句復雜度。當向數據表增加數據記錄時,如果設置為非空的字段不寫入數據,系統將會以默認值寫入。
例子:
?
提示
在上面的例子中 CHANGE 后面 username username ,前者表示更改的字段名,后者表示新字段名。在本例中,只更改了字段屬性為 NULL ,不涉及到字段名稱的更改,因此二者一致。
空
與非空相反,可以將字段屬性設置為空,如果字段屬性沒有設置為非空(NOT NULL)屬性,那么系統默認就是可以為空(NULL)值的。
將NULL 改為 NOT NULL:
?
唯一性約束
有時候某些字段數據不允許重復,如用戶名,這時候就需要增加唯一性約束(UNIQUE)。
語法:
?
主鍵(PRIMARY KEY)會強制性的擁有自動定義的唯一性約束,不用額外定義 UNIQUE 。
索引
數據庫索引(index)是為了增加查詢速度而對字段附加的一種標識。我們對表的某些可能需要經常查詢的字段建立適當的索引,那么在查詢該字段數據時,便會顯著的加快查詢速度。
語法:
KEY key_name (column_name)
KEY 后面的字符為索引名稱,括號內為建立索引的字段名。
改進后的建表 SQL
?
補充說明
在建表語句正文后面還附加了建表的其它幾個屬性:
ENGINE:表示存儲引擎類型,分為 MyISAM 和 InnoDB 兩種類型。MyISAM 不支持事務處理等高級處理,強調表的性能,執行也比 InnoDB 快。而 InnoDB 提供事務支持已經外部鍵等高級數據庫功能,性能上比 MyISAM 差。默認為 MyISAM 類型
CHARSET:表示數據表表字符集,一般為 gbk 或 utf8 以及 big5 等,為了兼容性考慮,我們設置為 utf8 字符集
AUTO_INCREMENT:設置主鍵默認增長的開始數
總結
以上是生活随笔為你收集整理的mysql数据库约束无符号,MySQL所支持的数据类型与表字段约束类型的学习教程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php-fpm自启动,php-fpm自启
- 下一篇: mac php 怎么启动命令,Mac 使