亚洲最大看欧美片,亚洲图揄拍自拍另类图片,欧美精品v国产精品v呦,日本在线精品视频免费

  • 站長(zhǎng)資訊網(wǎng)
    最全最豐富的資訊網(wǎng)站

    mysql主鍵非空約束怎么設(shè)置?

    mysql中可以通過(guò)在“CREATE TABLE”語(yǔ)句中,使用“<字段名> <數(shù)據(jù)類型> PRIMARY KEY [默認(rèn)值]”語(yǔ)句來(lái)設(shè)置主鍵約束,使用“<字段名> <數(shù)據(jù)類型> NOT NULL”語(yǔ)句來(lái)設(shè)置非空約束。

    mysql主鍵非空約束怎么設(shè)置?

    mysql主鍵約束

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

    使用主鍵應(yīng)注意以下幾點(diǎn):

    • 每個(gè)表只能定義一個(gè)主鍵。

    • 主鍵值必須唯一標(biāo)識(shí)表中的每一行,且不能為 NULL,即表中不可能存在有相同主鍵值的兩行數(shù)據(jù)。這是唯一性原則。

    • 一個(gè)字段名只能在聯(lián)合主鍵字段表中出現(xiàn)一次。

    • 聯(lián)合主鍵不能包含不必要的多余字段。當(dāng)把聯(lián)合主鍵的某一字段刪除后,如果剩下的字段構(gòu)成的主鍵仍然滿足唯一性原則,那么這個(gè)聯(lián)合主鍵是不正確的。這是最小化原則。

    在創(chuàng)建表時(shí)設(shè)置主鍵約束

    在創(chuàng)建數(shù)據(jù)表時(shí)設(shè)置主鍵約束,既可以為表中的一個(gè)字段設(shè)置主鍵,也可以為表中多個(gè)字段設(shè)置聯(lián)合主鍵。但是不論使用哪種方法,在一個(gè)表中主鍵只能有一個(gè)。下面分別講解設(shè)置單字段主鍵和多字段聯(lián)合主鍵的方法。

    1)設(shè)置單字段主鍵

    在 CREATE TABLE 語(yǔ)句中,通過(guò) PRIMARY KEY 關(guān)鍵字來(lái)指定主鍵。

    在定義字段的同時(shí)指定主鍵,語(yǔ)法格式如下:

    <字段名> <數(shù)據(jù)類型> PRIMARY KEY [默認(rèn)值]

    例 1

    在 test_db 數(shù)據(jù)庫(kù)中創(chuàng)建 tb_emp3 數(shù)據(jù)表,其主鍵為 id,SQL 語(yǔ)句和運(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)

    或者是在定義完所有字段之后指定主鍵,語(yǔ)法格式如下:

    [CONSTRAINT <約束名>] PRIMARY KEY [字段名]

    例 2

    在 test_db 數(shù)據(jù)庫(kù)中創(chuàng)建 tb_emp4 數(shù)據(jù)表,其主鍵為 id,SQL 語(yǔ)句和運(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í)設(shè)置聯(lián)合主鍵

    所謂的聯(lián)合主鍵,就是這個(gè)主鍵是由一張表中多個(gè)字段組成的。

    比如,設(shè)置學(xué)生選課數(shù)據(jù)表時(shí),使用學(xué)生編號(hào)做主鍵還是用課程編號(hào)做主鍵呢?如果用學(xué)生編號(hào)做主鍵,那么一個(gè)學(xué)生就只能選擇一門課程。如果用課程編號(hào)做主鍵,那么一門課程只能有一個(gè)學(xué)生來(lái)選。顯然,這兩種情況都是不符合實(shí)際情況的。

    實(shí)際上設(shè)計(jì)學(xué)生選課表,要限定的是一個(gè)學(xué)生只能選擇同一課程一次。因此,學(xué)生編號(hào)和課程編號(hào)可以放在一起共同作為主鍵,這也就是聯(lián)合主鍵了。

    主鍵由多個(gè)字段聯(lián)合組成,語(yǔ)法格式如下:

    PRIMARY KEY [字段1,字段2,…,字段n]

    注意:當(dāng)主鍵是由多個(gè)字段組成時(shí),不能直接在字段名后面聲明主鍵約束。

    例 3

    創(chuàng)建數(shù)據(jù)表 tb_emp5,假設(shè)表中沒(méi)有主鍵 id,為了唯一確定一個(gè)員工,可以把 name、deptId 聯(lián)合起來(lái)作為主鍵,SQL 語(yǔ)句和運(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)

    在修改表時(shí)添加主鍵約束

    主鍵約束不僅可以在創(chuàng)建表的同時(shí)創(chuàng)建,也可以在修改表時(shí)添加。但是需要注意的是,設(shè)置成主鍵約束的字段中不允許有空值。

    在修改數(shù)據(jù)表時(shí)添加主鍵約束的語(yǔ)法格式如下:

    ALTER TABLE <數(shù)據(jù)表名> ADD PRIMARY KEY(<字段名>);

    查看 tb_emp2 數(shù)據(jù)表的表結(jié)構(gòu),SQL 語(yǔ)句和運(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ǔ)句和運(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è)置表中某個(gè)字段的主鍵約束時(shí),要確保設(shè)置成主鍵約束的字段中值不能夠有重復(fù)的,并且要保證是非空的。否則,無(wú)法設(shè)置主鍵約束。

    mysql非空約束

    MySQL 非空約束(NOT NULL)指字段的值不能為空。對(duì)于使用了非空約束的字段,如果用戶在添加數(shù)據(jù)時(shí)沒(méi)有指定值,數(shù)據(jù)庫(kù)系統(tǒng)就會(huì)報(bào)錯(cuò)??梢酝ㄟ^(guò) CREATE TABLE 或 ALTER TABLE 語(yǔ)句實(shí)現(xiàn)。在表中某個(gè)列的定義后加上關(guān)鍵字 NOT NULL 作為限定詞,來(lái)約束該列的取值不能為空。

    比如,在用戶信息表中,如果不添加用戶名,那么這條用戶信息就是無(wú)效的,這時(shí)就可以為用戶名字段設(shè)置非空約束。

    在創(chuàng)建表時(shí)設(shè)置非空約束

    創(chuàng)建表時(shí)可以使用 NOT NULL 關(guān)鍵字設(shè)置非空約束,具體的語(yǔ)法格式如下:

    <字段名> <數(shù)據(jù)類型> NOT NULL

    例 1

    創(chuàng)建數(shù)據(jù)表 tb_dept4,指定部門名稱不能為空,SQL 語(yǔ)句和運(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)

    在修改表時(shí)添加非空約束

    如果在創(chuàng)建表時(shí)忘記了為字段設(shè)置非空約束,也可以通過(guò)修改表進(jìn)行非空約束的添加。

    修改表時(shí)設(shè)置非空約束的語(yǔ)法格式如下:

    ALTER TABLE <數(shù)據(jù)表名> CHANGE COLUMN <字段名> <字段名> <數(shù)據(jù)類型> NOT NULL;

    例 2

    修改數(shù)據(jù)表 tb_dept4,指定部門位置不能為空,SQL 語(yǔ)句和運(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)

    推薦教程:mysql視頻教程

    贊(0)
    分享到: 更多 (0)
    網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)