MySQLのきほん「NOT NULL制約」

スポンサーリンク
person s hand on laptop MySQL
Photo by Pixabay on Pexels.com

NULL値とは、値が何も定義されていない状態(未定義な値)を意味する。
例えば、usrテーブルでpasswdフィールド(パスワード)やunameフィールド(ユーザー名)に意味のある値が入力されていないのは不都合である。

そこで、NOT NULL 制約を設定しよう。これで、NULL値を禁止できる。

今回は、この「NOT NULL 制約」を設定しよう。

まずは、mysqlクライアントを起動しよう。

C:\Users\vinta>mysql -u root -p
Enter password: *****

続いて、basicデータベースに移動しよう。

mysql> USE basic;
Database changed

NOT NULL 制約を設定しよう

usrテーブルのpasswdフィールドとunameフィールドに対してNOT NULL制約を設定しよう。
以下の通り入力しよう。

mysql> ALTER TABLE usr
    -> MODIFY passwd varchar(15) NOT NULL,
    -> MODIFY uname varchar(20) NOT NULL;

以下の通り、「Query OK, ・・・」と表示されれば成功である。

mysql> ALTER TABLE usr
    -> MODIFY passwd varchar(15) NOT NULL,
    -> MODIFY uname varchar(20) NOT NULL;
Query OK, 0 rows affected (0.37 sec)
Records: 0  Duplicates: 0  Warnings: 0

フィールド情報を確認しよう

ここで、usrテーブルのフィールド情報を確認しよう。以下の通り入力しよう。

mysql> SHOW FIELDS FROM usr;

以下の通り、passwdフィールドとunameフィールドのNULL欄に「NO」と表示されている。

mysql> SHOW FIELDS FROM usr;
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| uid    | varchar(7)  | NO   | PRI | NULL    |       |
| passwd | varchar(15) | NO   |     | NULL    |       |
| uname  | varchar(20) | NO   |     | NULL    |       |
| family | int         | YES  |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+
4 rows in set (0.05 sec)

レコードを登録しよう(エラー確認)

usrテーブルにレコードを追加しよう。以下の通り入力しよう。

mysql> INSERT INTO usr (uid,passwd,family)
    -> VALUES('mharada','01230',3);

以下の通り、エラーメッセージが表示される。(unameフィールドに値が設定されていないため)

mysql> INSERT INTO usr (uid,passwd,family)
    -> VALUES('mharada','01230',3);
ERROR 1364 (HY000): Field 'uname' doesn't have a default value

レコードを登録しよう(成功確認)

続けて、usrテーブルにレコードを追加しよう。以下の通り入力しよう。

mysql> INSERT INTO usr (uid,passwd,uname,family)
    -> VALUES('mharada','01230','原田雅彦',3);

以下の通り、「Query OK, 1 row affected」と表示されれば成功である。

mysql> INSERT INTO usr (uid,passwd,uname,family)
    -> VALUES('mharada','01230','原田雅彦',3);
Query OK, 1 row affected (0.08 sec)

今回は、ここまでである。mysqlクライアントを終了しよう。

mysql> exit
Bye

参考)3ステップでしっかり学ぶ MySQL入門 [改訂第3版]  山田奈美(著)山田祥寛(監修)技術評論社

コメント

タイトルとURLをコピーしました