CREATE TABLE文を使用するとデータベースのテーブルをSQLで作成することができます。
上記の記事では、基本的なテーブルの作成について説明をしていますが、テーブルに作成する列に対する制約(ルール)は設定していません。
テーブルを作成するCREATE TABLE文では、テーブルの列についての制約を設定することができます。
そこで今回は、列にNULLを格納できないようにするNOT NULL制約について紹介したいと思います。
NOT NULL制約を設定するテーブル
NULLを格納できない列を設定するテーブルとして、以下のテーブルを用意します。
ユーザーテーブル
列名 | データ型 |
---|---|
ユーザーID | int |
ユーザー名 | varchar(50) |
備考 | varchar(200) |
テーブルを作成するSQL (CREATE TABLE)
ユーザーテーブルを作成する基本的なCREATE TABLE文は、以下のようになります。
1 2 3 4 5 6 |
CREATE TABLE 商品 ( ユーザーID int, ユーザー名 varchar(50), 備考 varchar(200) ); |
ユーザーテーブルでは、ユーザーを管理するためのユーザーIDにNULLが登録されると困りますので、ユーザーID列がNOT NULL制約の対象になります。
NOT NULL制約は列定義のデータ型(intやvarcharなど)の後に、スペース文字列を記述し、その後に記述します。
ユーザーテーブルのユーザーIDにNOT NULL制約を記述したCREATE TABLE文は、以下のようなSQLになります。
1 2 3 4 5 6 |
CREATE TABLE 商品 ( ユーザーID int NOT NULL, ユーザー名 varchar(50), 備考 varchar(200) ); |
NOT NULL制約を指定しておけば、誤ってNULLが登録されることがなくなりますので、NULLを登録して欲しくない列には必ず設定しておくことをお勧めします。
NOT NULL制約によってNULLを登録することはできなくなりますが、varcharなどの文字列型の列には空文字列が登録できてしまうので、注意が必要です。
NOT NULを省略して記述しなければ、列にNULLを格納することができますが、NULLを格納できる列を指定するために、明示的にNULLを指定することもできます。
NOT NULL制約は、それ単体で使用されるよりも、PRIMARY KEY制約やDEFAULT指定と合わせて使用されることが多いです。
列にNOT NULL制約が設定されていても、デフォルト値(DEFAULT)が定義されていれば、INSERT文で値が省略されてもNULLは格納されずにデフォルト値が格納されます。