NOT NULL 制約とは何ですか?
NOT NULL 制約は、テーブル内のすべての行がその特定の列に対して非 NULL 値を持つ必要があるため、列に NULL 値を含めることができないことを保証します。
チュートリアルの要件:
この投稿に記載されている手順に従うには、次の要件があることを前提としています。
- マシンに PostgreSQL サーバーがインストールされている
- 基本的な SQL の知識
- 制約や関数などのデータベーステーブルオブジェクトを作成する権限
テーブルの例:
まず、NOT NULL 制約を含む列を含むサンプル テーブルを設定しましょう。 WordPress の wp_users テーブルに似た基本テーブルを設定する次の create table ステートメントを考えてみましょう。
CREATE TABLE wp_users (
ID シリアル主キー、
user_login VARCHAR(60) NOT NULL、
user_pass VARCHAR(255) NOT NULL、
user_nicename VARCHAR(50) NOT NULL、
user_email VARCHAR(100) NOT NULL、
user_url VARCHAR(100)、
user_registered TIMESTAMP NOT NULL DEFAULT current_timestamp、
user_activation_key VARCHAR(255)、
user_status INT NOT NULL DEFAULT 0、
表示名 VARCHAR(250) NOT NULL
);
指定されたクエリから、ほとんどの列に NOT NULL 制約が含まれていることがわかります。
特定の列に NOT NULL 制約を作成する最も効率的な方法は、テーブルの作成時です。これにより、テーブルに追加されるすべてのデータが制約のルールに従うことが保証されます。
ただし、既存のテーブルに制約を追加した場合、ルールは制約の後に追加されたデータにのみ適用され、既存のデータには適用されません。これにより、特に大きなテーブルで不整合が発生する可能性があります。
NOT NULL制約を追加する
場合によっては、既存のテーブルに NOT NULL 制約を追加することが必要になる場合があります。たとえば、ALTER TABLE コマンドの後に ALTER COLUMN 句を使用できます。
構文は次のとおりです。
ALTER TABLE テーブル名ALTER COLUMN 列名 SET NOT NULL;
table_name をターゲット テーブルに置き換え、column_name を制約を適用するターゲット列に置き換えます。
制約を確認する
PSQL ユーティリティの「\d」コマンドを使用して、特定のテーブルに制約が存在することを確認できます。
\d テーブル名例:
サンプル_db=# \d wp_users;結果の出力は次のようになります。
NOT NULL制約を削除する
特定の列から NOT NULL 制約を削除することもできます。そのために、次のように ALTER TABLE 句と ALTER COLUMN 句を使用できます。
ALTER TABLE テーブル名ALTER COLUMN 列名 DROP NOT NULL;
たとえば、wp_users テーブルの user_url 列から NOT NULL 制約を削除するには、次のクエリを実行します。
ALTER TABLE wp_users ALTER COLUMN user_url DROP NOT NULL;これにより、テーブルから制約が削除されます。
結論
このチュートリアルでは、PostgreSQL で NOT NOLL 制約を処理する方法について説明しました。また、特定の列から既存の NOT NULL 制約を削除する方法も検討しました。