這篇文章主要介紹了MySQL主鍵非空約束如何設(shè)置,具有一定借鑒價(jià)值,需要的朋友可以參考下。希望大家閱讀完這篇文章后大有收獲。下面讓小編帶著大家一起了解一下。
專業(yè)從事成都網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì),高端網(wǎng)站制作設(shè)計(jì),小程序開發(fā),網(wǎng)站推廣的成都做網(wǎng)站的公司。優(yōu)秀技術(shù)團(tuán)隊(duì)竭力真誠服務(wù),采用H5開發(fā)+CSS3前端渲染技術(shù),自適應(yīng)網(wǎng)站建設(shè),讓網(wǎng)站在手機(jī)、平板、PC、微信下都能呈現(xiàn)。建站過程建立專項(xiàng)小組,與您實(shí)時在線互動,隨時提供解決方案,暢聊想法和感受。
mysql中可以通過在“CREATE TABLE”語句中,使用“<字段名> <數(shù)據(jù)類型> PRIMARY KEY [默認(rèn)值]”語句來設(shè)置主鍵約束,使用“<字段名> <數(shù)據(jù)類型> NOT NULL”語句來設(shè)置非空約束。
mysql主鍵約束
主鍵(PRIMARY KEY)的完整稱呼是“主鍵約束”,是 MySQL 中使用最為頻繁的約束。一般情況下,為了便于 DBMS 更快的查找到表中的記錄,都會在表中設(shè)置一個主鍵。
使用主鍵應(yīng)注意以下幾點(diǎn):
每個表只能定義一個主鍵。
主鍵值必須唯一標(biāo)識表中的每一行,且不能為 NULL,即表中不可能存在有相同主鍵值的兩行數(shù)據(jù)。這是唯一性原則。
一個字段名只能在聯(lián)合主鍵字段表中出現(xiàn)一次。
聯(lián)合主鍵不能包含不必要的多余字段。當(dāng)把聯(lián)合主鍵的某一字段刪除后,如果剩下的字段構(gòu)成的主鍵仍然滿足唯一性原則,那么這個聯(lián)合主鍵是不正確的。這是最小化原則。
在創(chuàng)建表時設(shè)置主鍵約束
在創(chuàng)建數(shù)據(jù)表時設(shè)置主鍵約束,既可以為表中的一個字段設(shè)置主鍵,也可以為表中多個字段設(shè)置聯(lián)合主鍵。但是不論使用哪種方法,在一個表中主鍵只能有一個。下面分別講解設(shè)置單字段主鍵和多字段聯(lián)合主鍵的方法。
1)設(shè)置單字段主鍵
在 CREATE TABLE 語句中,通過 PRIMARY KEY 關(guān)鍵字來指定主鍵。
在定義字段的同時指定主鍵,語法格式如下:
<字段名> <數(shù)據(jù)類型> PRIMARY KEY [默認(rèn)值]
例 1
在 test_db 數(shù)據(jù)庫中創(chuàng)建 tb_emp3 數(shù)據(jù)表,其主鍵為 id,SQL 語句和運(yùn)行結(jié)果如下。
mysql> CREATE TABLE tb_emp3 -> ( -> id INT(11) PRIMARY KEY, -> name VARCHAR(25), -> deptId INT(11), -> salary FLOAT -> ); Query OK, 0 rows affected (0.37 sec) mysql> DESC tb_emp3; +--------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------+-------------+------+-----+---------+-------+ | id | int(11) | NO | PRI | NULL | | | name | varchar(25) | YES | | NULL | | | deptId | int(11) | YES | | NULL | | | salary | float | YES | | NULL | | +--------+-------------+------+-----+---------+-------+ 4 rows in set (0.14 sec)
或者是在定義完所有字段之后指定主鍵,語法格式如下:
[CONSTRAINT <約束名>] PRIMARY KEY [字段名]
例 2
在 test_db 數(shù)據(jù)庫中創(chuàng)建 tb_emp4 數(shù)據(jù)表,其主鍵為 id,SQL 語句和運(yùn)行結(jié)果如下。
mysql> CREATE TABLE tb_emp4 -> ( -> id INT(11), -> name VARCHAR(25), -> deptId INT(11), -> salary FLOAT, -> PRIMARY KEY(id) -> ); Query OK, 0 rows affected (0.37 sec) mysql> DESC tb_emp4; +--------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------+-------------+------+-----+---------+-------+ | id | int(11) | NO | PRI | NULL | | | name | varchar(25) | YES | | NULL | | | deptId | int(11) | YES | | NULL | | | salary | float | YES | | NULL | | +--------+-------------+------+-----+---------+-------+ 4 rows in set (0.14 sec)
2)在創(chuàng)建表時設(shè)置聯(lián)合主鍵
所謂的聯(lián)合主鍵,就是這個主鍵是由一張表中多個字段組成的。
比如,設(shè)置學(xué)生選課數(shù)據(jù)表時,使用學(xué)生編號做主鍵還是用課程編號做主鍵呢?如果用學(xué)生編號做主鍵,那么一個學(xué)生就只能選擇一門課程。如果用課程編號做主鍵,那么一門課程只能有一個學(xué)生來選。顯然,這兩種情況都是不符合實(shí)際情況的。
實(shí)際上設(shè)計(jì)學(xué)生選課表,要限定的是一個學(xué)生只能選擇同一課程一次。因此,學(xué)生編號和課程編號可以放在一起共同作為主鍵,這也就是聯(lián)合主鍵了。
主鍵由多個字段聯(lián)合組成,語法格式如下:
PRIMARY KEY [字段1,字段2,…,字段n]
注意:當(dāng)主鍵是由多個字段組成時,不能直接在字段名后面聲明主鍵約束。
例 3
創(chuàng)建數(shù)據(jù)表 tb_emp5,假設(shè)表中沒有主鍵 id,為了唯一確定一個員工,可以把 name、deptId 聯(lián)合起來作為主鍵,SQL 語句和運(yùn)行結(jié)果如下。
mysql> CREATE TABLE tb_emp5 -> ( -> name VARCHAR(25), -> deptId INT(11), -> salary FLOAT, -> PRIMARY KEY(id,deptId) -> ); Query OK, 0 rows affected (0.37 sec) mysql> DESC tb_emp5; +--------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------+-------------+------+-----+---------+-------+ | name | varchar(25) | NO | PRI | NULL | | | deptId | int(11) | NO | PRI | NULL | | | salary | float | YES | | NULL | | +--------+-------------+------+-----+---------+-------+ 3 rows in set (0.14 sec)
在修改表時添加主鍵約束
主鍵約束不僅可以在創(chuàng)建表的同時創(chuàng)建,也可以在修改表時添加。但是需要注意的是,設(shè)置成主鍵約束的字段中不允許有空值。
在修改數(shù)據(jù)表時添加主鍵約束的語法格式如下:
ALTER TABLE <數(shù)據(jù)表名> ADD PRIMARY KEY(<字段名>);
查看 tb_emp2 數(shù)據(jù)表的表結(jié)構(gòu),SQL 語句和運(yùn)行結(jié)果如下所示。
mysql> DESC tb_emp2; +--------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------+-------------+------+-----+---------+-------+ | id | int(11) | NO | | NULL | | | name | varchar(30) | YES | | NULL | | | deptId | int(11) | YES | | NULL | | | salary | float | YES | | NULL | | +--------+-------------+------+-----+---------+-------+ 4 rows in set (0.14 sec)
例 4
修改數(shù)據(jù)表 tb_emp2,將字段 id 設(shè)置為主鍵,SQL 語句和運(yùn)行結(jié)果如下。
mysql> ALTER TABLE tb_emp2 -> ADD PRIMARY KEY(id); Query OK, 0 rows affected (0.94 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> DESC tb_emp2; +--------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------+-------------+------+-----+---------+-------+ | id | int(11) | NO | PRI | NULL | | | name | varchar(30) | YES | | NULL | | | deptId | int(11) | YES | | NULL | | | salary | float | YES | | NULL | | +--------+-------------+------+-----+---------+-------+ 4 rows in set (0.12 sec)
通常情況下,當(dāng)在修改表時要設(shè)置表中某個字段的主鍵約束時,要確保設(shè)置成主鍵約束的字段中值不能夠有重復(fù)的,并且要保證是非空的。否則,無法設(shè)置主鍵約束。
mysql非空約束
MySQL 非空約束(NOT NULL)指字段的值不能為空。對于使用了非空約束的字段,如果用戶在添加數(shù)據(jù)時沒有指定值,數(shù)據(jù)庫系統(tǒng)就會報(bào)錯。可以通過 CREATE TABLE 或 ALTER TABLE 語句實(shí)現(xiàn)。在表中某個列的定義后加上關(guān)鍵字 NOT NULL 作為限定詞,來約束該列的取值不能為空。
比如,在用戶信息表中,如果不添加用戶名,那么這條用戶信息就是無效的,這時就可以為用戶名字段設(shè)置非空約束。
在創(chuàng)建表時設(shè)置非空約束
創(chuàng)建表時可以使用 NOT NULL 關(guān)鍵字設(shè)置非空約束,具體的語法格式如下:
<字段名> <數(shù)據(jù)類型> NOT NULL
例 1
創(chuàng)建數(shù)據(jù)表 tb_dept4,指定部門名稱不能為空,SQL 語句和運(yùn)行結(jié)果如下所示。
mysql> CREATE TABLE tb_dept4 -> ( -> id INT(11) PRIMARY KEY, -> name VARCHAR(22) NOT NULL, -> location VARCHAR(50) -> ); Query OK, 0 rows affected (0.37 sec) mysql> DESC tb_dept3; +----------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------+-------------+------+-----+---------+-------+ | id | int(11) | NO | PRI | NULL | | | name | varchar(22) | NO | | NULL | | | location | varchar(50) | YES | | NULL | | +----------+-------------+------+-----+---------+-------+ 3 rows in set (0.06 sec)
在修改表時添加非空約束
如果在創(chuàng)建表時忘記了為字段設(shè)置非空約束,也可以通過修改表進(jìn)行非空約束的添加。
修改表時設(shè)置非空約束的語法格式如下:
ALTER TABLE <數(shù)據(jù)表名> CHANGE COLUMN <字段名> <字段名> <數(shù)據(jù)類型> NOT NULL;
例 2
修改數(shù)據(jù)表 tb_dept4,指定部門位置不能為空,SQL 語句和運(yùn)行結(jié)果如下所示。
mysql> ALTER TABLE tb_dept4 -> CHANGE COLUMN location -> location VARCHAR(50) NOT NULL; Query OK, 0 rows affected (0.15 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> DESC tb_dept4; +----------+-------------+------+-----+----------+-------+ | Field | Type | Null | Key | Default | Extra | +----------+-------------+------+-----+----------+-------+ | id | int(11) | NO | PRI | NULL | | | name | varchar(22) | NO | | NULL | | | location | varchar(50) | NO | | NULL | | +----------+-------------+------+-----+----------+-------+ 3 rows in set (0.00 sec)
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享mysql主鍵非空約束如何設(shè)置內(nèi)容對大家有幫助,同時也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,遇到問題就找創(chuàng)新互聯(lián),詳細(xì)的解決方法等著你來學(xué)習(xí)!
文章題目:mysql主鍵非空約束如何設(shè)置
網(wǎng)頁路徑:http://jinyejixie.com/article10/jjpego.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設(shè)計(jì)、移動網(wǎng)站建設(shè)、微信小程序、網(wǎng)站設(shè)計(jì)、網(wǎng)站導(dǎo)航、定制開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)