SQLのCREATE TABLEでテーブルの列にNULL値を認めない(NOT NULL)制約を設定する

CREATE TABLE文を使用するとデータベースのテーブルをSQLで作成することができます。

基本的なテーブルの作成
データベースのテーブルを作成するSQL CREATE TABLE
SQL文では、既存のテーブルに対してINSERT、UPDATE、DELETEなどのステートメントを使用して、テーブルやビューのデータ(レコー...

上記の記事では、基本的なテーブルの作成について説明をしていますが、テーブルに作成する列に対する制約(ルール)は設定していません。

テーブルを作成するCREATE TABLE文では、テーブルの列についての制約を設定することができます。

そこで今回は、列にNULLを格納できないようにするNOT NULL制約について紹介したいと思います。

NOT NULL制約を設定するテーブル

NULLを格納できない列を設定するテーブルとして、以下のテーブルを用意します。

ユーザーテーブル

列名 データ型
ユーザーID int
ユーザー名 varchar(50)
備考 varchar(200)

テーブルを作成するSQL (CREATE TABLE)

ユーザーテーブルを作成する基本的なCREATE TABLE文は、以下のようになります。

ユーザーテーブルでは、ユーザーを管理するためのユーザーIDにNULLが登録されると困りますので、ユーザーID列がNOT NULL制約の対象になります。
NOT NULL制約は列定義のデータ型(intやvarcharなど)の後に、スペース文字列を記述し、その後に記述します。

列名 データ型 NOT NULL

ユーザーテーブルのユーザーIDにNOT NULL制約を記述したCREATE TABLE文は、以下のようなSQLになります。

NOT NULL制約を指定しておけば、誤ってNULLが登録されることがなくなりますので、NULLを登録して欲しくない列には必ず設定しておくことをお勧めします。

NOT NULL制約によってNULLを登録することはできなくなりますが、varcharなどの文字列型の列には空文字列が登録できてしまうので、注意が必要です。

NOT NULを省略して記述しなければ、列にNULLを格納することができますが、NULLを格納できる列を指定するために、明示的にNULLを指定することもできます。

列名 データ型 NULL

NOT NULL制約は、それ単体で使用されるよりも、PRIMARY KEY制約やDEFAULT指定と合わせて使用されることが多いです。
列にNOT NULL制約が設定されていても、デフォルト値(DEFAULT)が定義されていれば、INSERT文で値が省略されてもNULLは格納されずにデフォルト値が格納されます。

SQLのCREATE TABLEでテーブルに主キー(PRIMARY KEY)制約を設定する
SQLのCREATE TABLE文を使うことで、データベースにテーブルを作成することができます。 基本的なテーブルの作成 ...
SQLのCREATE TABLEでテーブルの列にデフォルト値(DEFAULT)を設定する
SQLを使ってデータベースにテーブルを作成するには、CREATE TABLE文を使います。 CREATE TABLE文では、テ...