站長資訊網
        最全最豐富的資訊網站

        mysql主鍵非空約束怎么設置?

        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視頻教程

        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: 国产福利视精品永久免费| 国产精品丝袜一区二区三区| 欧美jizzhd精品欧美| 国产一区二区三区欧美精品| 国产精品后入内射日本在线观看| 久久无码人妻精品一区二区三区 | 亚洲高清国产拍精品26U| 999国产精品色在线播放| 国产精品久久久久国产A级| 在线精品国产一区二区三区| 精品精品国产国产| 国产91在线精品| 四虎国产精品永久地址99| 8AV国产精品爽爽ⅴa在线观看| 日韩精品无码专区免费播放| 亚洲AV永久无码精品一区二区| 久久精品国产精品亚洲下载| 国产精品永久久久久久久久久| 6080亚洲精品午夜福利| 久久精品国产99国产精偷| 国产精品岛国久久久久| 国产a视频精品免费观看| 69国产成人综合久久精品| 国产精品美脚玉足脚交欧美| 久久精品蜜芽亚洲国产AV| 国产69精品久久久久99尤物| 国产精品va久久久久久久 | 日韩精品无码专区免费播放| 亚洲一级Av无码毛片久久精品| 欧美日韩综合精品| 无码AⅤ精品一区二区三区| 四虎影视永久在线精品免费| 无码精品人妻一区二区三区影院| 日韩精品一区二区三区中文字幕 | 欧美巨大黑人精品videos| 久久国产精品99精品国产987| 国产精品日本欧美一区二区| 97精品一区二区视频在线观看| 69久久夜色精品国产69| 久久国产精品-久久精品| 亚洲国产精品第一区二区|