MySQL,PRIMARY KEYで主キーを設定する

スポンサーリンク

鍛錬 891

MySQL,PRIMARY KEYで主キーを設定する

テーブルを作成する際に主キー(primary key) を設定するには、PRIMARY KEY を使用します。
 
使用方法は、以下に示す通りです。

CREATE TABLE テーブル名 (カラム名 データ型 PRIMARY KEY, ・・・);

 
主キー(primary key) を設定されたカラムには、インデックス(INDEX) が自動的に設定されます。

主キー(primary key) を設定されたカラムは、以下の制約が発生します。

  • 値の重複ができない
  • NULL の格納ができない
 
スポンサーリンク

実行結果

以下は、テーブルを作成する際に主キー(primary key) を設定しています。

テーブルを作成

今回は、テーブル「lang」を作成する際に、カラム「id」に主キー(primary key) を設定しています。

作成するテーブル

カラム(1列目) カラム(2列目)
id
(primary key)
type
mysql> 
mysql> create table lang (id int primary key, type varchar(256));
Query OK, 0 rows affected (0.00 sec)

mysql> 
mysql> 
mysql> show columns from lang;
+-------+--------------+------+-----+---------+-------+
| Field | Type         | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| id    | int(11)      | NO   | PRI | NULL    |       |
| type  | varchar(256) | YES  |     | NULL    |       |
+-------+--------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

 
上記に示した通り、テーブルの構造を確認すると、カラム「id」の項目「Null」が「NO」となっており、項目「Key」が「PRI」となっていることが分かります。

インデックス(INDEX) が設定されたことを確認

以下は、作成したテーブル lang にインデックスが自動的に設定されていることを、SHOW INDEX を使用して確認しています。

mysql> 
mysql> show index from lang \G
*************************** 1. row ***************************
        Table: lang
   Non_unique: 0
     Key_name: PRIMARY
 Seq_in_index: 1
  Column_name: id
    Collation: A
  Cardinality: 0
     Sub_part: NULL
       Packed: NULL
         Null: 
   Index_type: BTREE
      Comment: 
Index_comment: 
1 row in set (0.00 sec)

 
上記に示した通り、インデックスの名前が表示される「Key_name」の項目が「PRIMARY」となっており、インデックスが主キー(primary key) として設定されていることが分かります。

重複したデータを追加

以下は、データを追加する際に、主キー(primary key) を設定したカラム「id」に重複するデータを指定しています。

データを追加する前のテーブル

id
(primary key)
type
1 C

 
2行目にデータの追加を試みる

id
(primary key)
type
1 C
1 Assembly
mysql> 
mysql> select * from lang;
+----+------+
| id | type |
+----+------+
|  1 | C    |
+----+------+
1 row in set (0.00 sec)

mysql> 
mysql> 
mysql> insert into lang values (1, 'Assembly');
ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'

 
上記に示した通り、カラム「id」は主キー(primary key) を設定しているため、重複した値「1」を追加しようするとエラーとなりました。

NULL を追加

以下は、データを追加する際に、主キー(primary key) を設定しているカラム「id」に「NULL」を指定しています。

データを追加する前のテーブル

id
(primary key)
type
1 C

 
2行目にデータの追加を試みる

id
(primary key)
type
1 C
NULL Assembly
mysql> 
mysql> select * from lang;
+----+------+
| id | type |
+----+------+
|  1 | C    |
+----+------+
1 row in set (0.00 sec)

mysql> 
mysql> 
mysql> insert into lang values (NULL, 'Assembly');
ERROR 1048 (23000): Column 'id' cannot be null

 
上記に示した通り、カラム「id」は主キー(primary key) を設定しているため、「NULL」を格納しようとしてもエラーとなりました。

スポンサーリンク

シェアする

フォローする