首頁 > 資料庫 > mysql教程 > mysql主鍵非空約束怎麼設定?

mysql主鍵非空約束怎麼設定?

青灯夜游
發布: 2020-10-07 11:57:10
原創
4585 人瀏覽過

mysql中可以透過在「CREATE TABLE」語句中,使用「<字段名> <資料類型> PRIMARY KEY [預設值]」語句來設定主鍵約束,使用「<字段名> <資料型別> NOT NULL”語句來設定非空約束。

mysql主鍵非空約束怎麼設定?

#mysql主鍵約束

主鍵(PRIMARY KEY)的完整稱呼是“主鍵約束”,是 MySQL 中使用最頻繁的約束。一般情況下,為了方便 DBMS 更快的查找到表中的記錄,都會在表中設定一個主鍵。

使用主鍵應注意以下幾點:

  • #每個表只能定義一個主鍵。

  • 主鍵值必須唯一標識表中的每一行,且不能為 NULL,即表中不可能存在具有相同主鍵值的兩行資料。這是唯一性原則。

  • 一個欄位名稱只能在聯合主鍵欄位表中出現一次。

  • 聯合主鍵不能包含不必要的多餘欄位。當刪除聯合主鍵的某一欄位後,如果剩下的欄位所構成的主鍵仍然滿足唯一性原則,那麼這個聯合主鍵是不正確的。這是最小化原則。

在建立表格時設定主鍵約束

#在建立資料表時設定主鍵約束,既可以為表格中的一個欄位設定主鍵,也可以為表中多個欄位設定聯合主鍵。但是不論使用哪一種方法,在一個表中主鍵只能有一個。以下分別講解設定單字段主鍵和多字段聯合主鍵的方法。

1)設定單一欄位主鍵

在 CREATE TABLE 語句中,透過 PRIMARY KEY 關鍵字來指定主鍵。

在定義欄位的同時指定主鍵,語法格式如下:

<字段名> <数据类型> PRIMARY KEY [默认值]
登入後複製

範例1

在test_db 資料庫中建立tb_emp3 資料表,其主鍵為id,SQL 語句和運行結果如下。

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 資料庫中建立tb_emp4  資料表,其主鍵為id ,SQL 語句和運行結果如下。

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)在建立表格時設定聯合主鍵

所謂的聯合主鍵,就是這個主鍵是由一張表中多個欄位組成的。

例如,設定學生選課資料表時,使用學生編號做主鍵還是用課程編號做主鍵呢?如果用學生編號做主鍵,那麼一個學生就只能選擇一門課程。如果用課程編號做主鍵,那麼一門課程只能有一個學生來選。顯然,這兩種情況都是不符合實際情況的。

實際上設計學生選課表,要限定的是一位學生只能選擇同一課程一次。因此,學生編號和課程編號可以放在一起共同作為主鍵,也就是聯合主鍵了。

主鍵由多個欄位聯合組成,語法格式如下:

PRIMARY KEY [字段1,字段2,…,字段n]
登入後複製

注意:當主鍵是由多個欄位組成時,不能直接在欄位名稱後面宣告主鍵約束。

例 3

建立資料表 tb_emp5,假設表中沒有主鍵 id,為了唯一確定一個員工,可以把 name、deptId 聯合起來作為主鍵,SQL 語句和運行結果如下。

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)
登入後複製

在修改表時新增主鍵約束

主鍵約束不僅可以在建立表的同時創建,也可以在修改表時新增。但是要注意的是,設定成主鍵約束的欄位中不允許有空值。

在修改資料表時新增主鍵約束的語法格式如下:

ALTER TABLE <数据表名> ADD PRIMARY KEY(<字段名>);
登入後複製

檢視 tb_emp2 資料表的表結構,SQL 語句和執行結果如下所示。

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

修改資料表 tb_emp2,將欄位 id 設為主鍵,SQL 語句和執行結果如下。

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)
登入後複製

通常情況下,當在修改表時要設定表中某個欄位的主鍵約束時,要確保設定成主鍵約束的欄位中值不能夠有重複的,並且要保證是非空的。否則,無法設定主鍵約束。

mysql非空白限制

MySQL 非空白限制(NOT NULL)指標欄位的值不能為空。對於使用了非空約束的字段,如果使用者在新增資料時沒有指定值,資料庫系統就會報錯。可以透過 CREATE TABLE 或 ALTER TABLE 語句實現。在表中某個列的定義後面加上關鍵字 NOT NULL 作為限定詞,來約束該列的取值不能為空。

例如,在使用者資訊表中,如果不新增使用者名,那麼這條使用者資訊就是無效的,這時就可以為使用者名字段設定非空約束。

在建立表格時設定非空約束

建立表格時可以使用NOT NULL 關鍵字設定非空約束,具體的語法格式如下:

<字段名> <数据类型> NOT NULL
登入後複製

例1

建立資料表tb_dept4,指定部門名稱不能為空,SQL 語句和運行結果如下所示。

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)
登入後複製

在修改表时添加非空约束

如果在创建表时忘记了为字段设置非空约束,也可以通过修改表进行非空约束的添加。

修改表时设置非空约束的语法格式如下:

ALTER TABLE <数据表名>
CHANGE COLUMN <字段名>
<字段名> <数据类型> NOT NULL;
登入後複製

例 2

修改数据表 tb_dept4,指定部门位置不能为空,SQL 语句和运行结果如下所示。

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)
登入後複製

推荐教程:mysql视频教程

以上是mysql主鍵非空約束怎麼設定?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板