MySQL所支撐的數據類型與表字段束縛類型的進修教程。本站提示廣大學習愛好者:(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 。設置了主動遞增後,該列不消再設置默許值和獨一性束縛。
例子:
uid mediumint(8) NOT NULL auto_increment
非空
由於邏輯上的一些請求,有時刻須要把字段屬性設置為非空(NOT NULL),如記載用戶名、暗碼等非空值的字段。
設置為非空的列,固然不是必需,但最好設定一個默許值,以避免不測的毛病和削減增長數據時的 SQL 語句龐雜度。當向數據表增長數據記載時,假如設置為非空的字段不寫入數據,體系將會以默許值寫入。
例子:
username char(20) NOT NULL default '' //將NOT NULL 改成 NULL ALTER TABLE user CHANGE username username char(20) NULL
提醒
在下面的例子中 CHANGE 前面 username username ,前者表現更改的字段名,後者表現新字段名。在本例中,只更改了字段屬性為 NULL ,不觸及到字段稱號的更改,是以兩者分歧。
空
與非空相反,可以將字段屬性設置為空,假如字段屬性沒有設置為非空(NOT NULL)屬性,那末體系默許就是可認為空(NULL)值的。
將NULL 改成 NOT NULL:
ALTER TABLE user CHANGE username username char(20) NOT NULL DEFAULT ''
獨一性束縛
有時刻某些字段數據不許可反復,如用戶名,這時候候就須要增長獨一性束縛(UNIQUE)。
語法:
UNIQUE (column_name) //給表字段增長 UNIQUE ALTER TABLE tb_name ADD UNIQUE (column_name) //去失落 UNIQUE ALTER TABLE tb_name DROP INDEX column_name
主鍵(PRIMARY KEY)會強迫性的具有主動界說的獨一性束縛,不消額定界說 UNIQUE 。
索引
數據庫索引(index)是為了增長查詢速度而對字段附加的一種標識。我們對表的某些能夠須要常常查詢的字段樹立恰當的索引,那末在查詢該字段數據時,便會明顯的加速查詢速度。
語法:
KEY key_name (column_name)
KEY 前面的字符為索引稱號,括號內為樹立索引的字段名。
改良後的建表 SQL
CREATE TABLE user ( uid mediumint(8) unsigned NOT NULL auto_increment, username char(15) NOT NULL default '', password char(32) NOT NULL default '', email varchar(40) NOT NULL default '', regdate int(10) unsigned NOT NULL default '0', PRIMARY KEY (uid), UNIQUE KEY username (username), KEY email (email) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
彌補解釋
在建表語句注釋前面還附加了建表的其它幾個屬性:
ENGINE:表現存儲引擎類型,分為 MyISAM 和 InnoDB 兩品種型。MyISAM 不支撐事務處置等高等處置,強調表的機能,履行也比 InnoDB 快。而 InnoDB 供給事務支撐曾經內部鍵等高等數據庫功效,機能上比 MyISAM 差。默許為 MyISAM 類型
CHARSET:表現數據表表字符集,普通為 gbk 或 utf8 和 big5 等,為了兼容性斟酌,我們設置為 utf8 字符集
AUTO_INCREMENT:設置主鍵默許增加的開端數