未来エンジニア養成所Blog

月単価180万以上のプログラミング講師がプログラミングを皆に楽しんでもらうための情報をお届けします。

【DB入門】テーブルの修正 Part2

title



主キーの設定

ここまでのテーブル作成は、列名とデータ型を指定してきましたが、リレーショナルデータベースの最大の特徴は、複数の表を連携させて意味を持たせることでした。

また、データベースでは1つのレコードはユニーク(一意:必ず1つだけが特定できる)でなければなりません。

表と表を関連付けるリレーショナルシップには、主キーを設定します。

主キーに、ユニークなレコードを作る場合、列に、他の列と区別するための特別な属性を指定します。

主キーを設定するには、PRIMARY KEY制約を設定します。

PRIMARY KEY制約を設定すると、次の2つの制約も同時に設定されます。


  • 値の重複がない(UNIQUE制約)
  • 必ずデータを入力しなければならない(NOT NULL制約)



主キーなどの制約の設定は「CREATE TABLE」文の中でテーブル作成時に設定する方法と、「ALTER TABLE」文の中で後から設定する方法があります。



【書式】主キーの設定をしてテーブルを作成する

CREATE TABLE テーブル名 ( 列名 データ型 PRIMARY KEY );


次の例は、[syain_master]テーブルを元に「syain_master_const」という新しいテーブルに主キー列を追加しています。


「syain_master_const」テーブルのテーブル構造

テーブル構造


テーブルを作成するSQL文を「syain_master_const_sql.txt」に記述し、C:¥db_primary に保存


[C:¥db_primary¥syain_master_const_sql.txt]

CREATE TABLE syain_master_const (
  syain_no CHAR(5) PRIMARY KEY,
  syain_name VARCHAR(20),
  shop_no CHAR(5)
);


「syain_master_const_sql.txt」をsourceコマンドで実行

mysql> source C:¥db_primary¥syain_master_const_sql.txt
Query OK, 0 rows affected (0.06 sec)


「syain_master_const」テーブルの構造

テーブル構造



「syain_no」列の[Key]に「PRI」と表示され、「PRIMARY KEY制約」(主キー)が設定されています。

また、[Null]に「NO」と表示され、NULL値を許可しない、すなわち「NOT NULL制約」が設定されています。

PRIMARY KEY制約を設定すると、このようにNOT NULL制約も自動的に設定されます。

また同時に、UNIQUE制約も設定されますので、重複したデータを挿入できなくなります。


ここで、社員番号が重複する次のデータを入力してみましょう。

社員データ



「PRIMARY KEYが設定されている列に、’F001M’という重複したデータが入力されました」というエラーメッセージが表示されています。

エラーメッセージ



INSERTコマンドはエラーになっているので、[syain_master_const]テーブルにはデータは登録されていません。

mysql> SELECT * FROM syain_master_const;
Empty set (0.00 sec)



【書式】すでにあるテーブルの列に主キーを設定する

ALTER TABLE テーブル名 ADD PRIMARY KEY ( 列名 );


次の例は、[syain_master]テーブルの[syain_no]にPRIMARY_KEYを設定しています。

mysql> ALTER TABLE syain_master ADD PRIMARY KEY ( syain_no );
Query OK, 8 rows affected (0.37 sec)


[syain_no]列にPRIMARY KEYが設定されているのがわかります。

PRIMARY KEYの設定


[syain_master]テーブルに登録されているレコードを確認します。

レコード確認


[syain_no]の値が重複する次のレコードを挿入してみます。

社員データ

エラー


「PRIMARY KEYが設定されている列に、’F001C'という重複した値を入力している」というエラーメッセージが表示されています。

このようにPRIMARY KEY制約が設定されている列には、すでに登録されている値を登録することはできません。



UNIQUE制約(一意キー)の設定

【書式】一意キーの設定をしてテーブルを作成する

CREATE TABLE テーブル名 ( 列名 データ型 UNIQUE );

【書式】すでにあるテーブルの列に一意キーを設定する

ALTER TABLE テーブル名 ADD UNIQUE ( 列名 );


次の例は、[syain_master]テーブルの[serial_no]列に、UNIQUE制約を追加しています。

mysql> ALTER TABLE syain_master ADD UNIQUE ( serial_no );
Query OK, 0 rows affected (0.50 sec)

UNIQUE制約を追加


[serial_no]列の値が重複する次のデータを入力してみましょう。

重複データ


「[serial_no]列の'100'というデータが重複している」というエラーメッセージが表示されています。

エラーメッセージ



NOT NULL制約の設定

【書式】NOT NULL制約の設定をしてテーブルを作成する

CREATE TABLE テーブル名 ( 列名 データ型 NOT NULL );

【書式】すでにあるテーブルの列にNOT NULL制約を設定する

ALTER TABLE テーブル名 CHANGE COLUMUN 変更前列名 変更後列名 データ型 NOT NULL;


ポイント

MySQLでは、他の制約のようにテーブルの作成後に「ALTER TABLE」文のADD句で任意の列にNOT NULL制約のみを設定することはできません。

MySQLでNOT NULL制約を追加するには「ALTER TABLE」文の「CHANGE COLUMN」句を使用して、列ごと定義を変更します。


次の例は、[syain_master]テーブルの[syain_name]列に、NOT NULL制約を設定しています。

mysql> ALTER TABLE syain_master CHANGE COLUMN syain_name syain_name VARCHAR(20) NOT NULL;
Query OK, 8 rows affected (0.05 sec)


[syain_name]列にNOT NULL制約が追加されていることがわかります。

NOT NULL制約を追加


参考図書



LINE公式アカウント

仕事が辛くてたまらない人生が、仕事が楽しくてたまらない人生に変わります。
【登録いただいた人全員に、無料キャリア相談プレゼント中!】


LineOfficial

友だち追加



【まついのLINE公式アカウントはこちらから!】
Line公式アカウント