mysqlの主キーの非null制約を設定するにはどうすればよいですか?

青灯夜游
リリース: 2020-10-07 11:57:10
オリジナル
4538 人が閲覧しました

mysql では、「CREATE TABLE」ステートメント内の「<フィールド名> <データ型> PRIMARY KEY [デフォルト値]」ステートメントを使用し、「<フィールド」を使用して主キー制約を設定できます。 Name> NOT NULL」ステートメントを使用して、非 null 制約を設定します。

mysqlの主キーの非null制約を設定するにはどうすればよいですか?

##mysql 主キー制約 PRIMARY KEY の正式名称は「主キー制約」で、MySQL で最もよく使われる制約です。通常の状況では、DBMS がテーブル内のレコードをより速く検索できるようにするために、テーブルに主キーが設定されます。

主キーを使用する場合は、次の点に注意する必要があります。

    各テーブルには、主キーを 1 つだけ定義できます。
  • 主キー値はテーブル内の各行を一意に識別する必要があり、NULL にすることはできません。つまり、テーブル内に同じ主キー値を持つデータ行が 2 つ存在することはできません。これが一意性の原則です。
  • #フィールド名は、結合主キー フィールド テーブルに 1 回だけ出現できます。
  • 結合主キーには、不必要な冗長フィールドを含めることはできません。結合主キーのフィールドが削除されたときに、残りのフィールドで構成される主キーがまだ一意性の原則を満たしている場合、結合主キーは正しくありません。これが最小化の原理です。
  • テーブルの作成時に主キー制約を設定します。

データ テーブルの作成時に主キー制約を設定します。主キー制約も設定できます。テーブル内のフィールドのキー。テーブル内の複数のフィールドに共通の主キーを設定することもできます。ただし、どの方法を使用する場合でも、テーブル内に存在できる主キーは 1 つだけです。単一フィールドの主キーと複数フィールドの結合主キーの設定方法を説明します。

1) 単一フィールドの主キーを設定する

CREATE TABLE ステートメントで、PRIMARY KEY キーワードを使用して主キーを指定します。

フィールドを定義するときに主キーを指定します。構文形式は次のとおりです:

<字段名> <数据类型> PRIMARY KEY [默认值]
ログイン後にコピー

例 1

test_db データベースに tb_emp3 データ テーブルを作成します。 is 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) テーブル作成時に結合主キーを設定する

いわゆる結合主キーとは、主キーがテーブル内の複数のフィールドで構成されることを意味します。

たとえば、学生のコース選択データ テーブルを設定する場合、学生番号を主キーとして使用する必要がありますか、それともコース番号を主キーとして使用する必要がありますか?学生番号を主キーとして使用する場合、学生は 1 つのコースのみを選択できます。コース番号を主キーとして使用する場合、コースを選択できるのは 1 人の学生だけです。明らかに、これらの状況はどちらも非現実的です。

実際、学生のコース選択スケジュールを設計する際、学生は同じコースを 1 回しか選択できないという制限があります。したがって、学生番号とコース番号を主キーとしてまとめることができ、これが結合主キーになります。

主キーは複数のフィールドで構成されています。構文形式は次のとおりです:

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)
ログイン後にコピー

テーブル変更時に主キー制約を追加する

主キー制約は、テーブルの作成時に作成できるだけでなく、テーブルの作成時にも追加できます。変更されました。ただし、主キー制約として設定されたフィールドでは null 値は許可されないことに注意してください。

データ テーブルを変更するときに主キー制約を追加するための構文形式は次のとおりです:

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 非 null 制約

MySQL の非 null 制約 (NOT NULL) は、フィールドの値を null にすることができないことを意味します。非 NULL 制約を使用するフィールドの場合、データを追加するときにユーザーが値を指定しないと、データベース システムはエラーを報告します。これは、CREATE TABLE または ALTER TABLE ステートメントを使用して実現できます。テーブル内の列の定義の後に修飾子としてキーワード NOT NULL を追加して、列の値が空にならないように制限します。

たとえば、ユーザー情報テーブルでユーザー名が追加されていない場合、このユーザー情報は無効になりますが、このとき、ユーザー名フィールドに非null制約を設定できます。



テーブルの作成時に非 null 制約を設定する

テーブルの作成時に NOT NULL キーワードを使用して、非 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の主キーの非null制約を設定するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート