SQL ServerのDEFAULT制約を徹底解説!初心者にもわかりやすい実例と演習付き

SQL Serverは、多くの企業や開発者に利用されているデータベース管理システム(DBMS)です。その中でもDEFAULT制約は、テーブルのデフォルト値を設定する際に非常に便利な機能です。この制約をうまく活用すれば、データの一貫性を保ちつつ、コードの冗長性を減らすことができます。

この記事では、SQL ServerにおけるDEFAULT制約について、初心者の方でも理解できるように基礎から詳しく解説します。また、学んだ知識を応用できるよう、演習問題と解答例も用意しています。


DEFAULT制約とは?

DEFAULT制約の概要

DEFAULT制約は、新しい行を挿入する際に、特定の列に値が指定されなかった場合に自動的に設定されるデフォルト値を定義するものです。

これにより、明示的に値を指定しなくても、指定されたデフォルト値が自動で入力されるため、エラーの発生やデータの欠損を防ぐことができます。

使用例

例えば、従業員テーブルにおいて、「入社日は通常、現在の日付とする」という要件がある場合、DEFAULT制約を使用すれば、明示的に入社日を指定しなくても、自動的に今日の日付が設定されます。


DEFAULT制約の利点

  1. データの一貫性を確保
    デフォルト値を設定することで、データの一貫性を保つことができます。例えば、「支払いステータスが未指定の場合、必ず'未払い'とする」といった規則を簡単に実現できます。
  2. コーディングの簡略化
    INSERT文で値を指定しなくても良いため、SQLコードが簡潔になります。
  3. エラー防止
    値が必須の列に値を指定し忘れることで発生するエラーを防止します。

DEFAULT制約の基本構文

DEFAULT制約は、テーブル作成時または既存のテーブルに後から追加することができます。

テーブル作成時にDEFAULT制約を設定する

CREATE TABLE Employees (
    EmployeeID INT PRIMARY KEY,
    EmployeeName NVARCHAR(100),
    HireDate DATE DEFAULT GETDATE(),
    Status NVARCHAR(20) DEFAULT 'Active'
);

この例では、HireDate列にはデフォルトで現在の日付(GETDATE())、Status列にはデフォルトで'Active'が設定されます。

既存のテーブルにDEFAULT制約を追加する

ALTER TABLE Employees
ADD CONSTRAINT DF_Status DEFAULT 'Active' FOR Status;

ここでは、EmployeesテーブルのStatus列にデフォルト値'Active'を追加しています。


DEFAULT制約を削除する

DEFAULT制約の削除方法

既存のDEFAULT制約を削除する場合、以下の手順を実行します。

制約名を確認する

制約名は自動生成される場合があります。確認するには以下のクエリを実行します。

SELECT name
FROM sys.default_constraints
WHERE parent_object_id = OBJECT_ID('Employees') AND parent_column_id = COLUMNPROPERTY(OBJECT_ID('Employees'), 'Status', 'ColumnId');
制約を削除する

制約名が分かったら、以下のクエリで削除します。

ALTER TABLE Employees DROP CONSTRAINT DF_Status;

DEFAULT制約の実用例

実例1: 注文テーブルの作成

CREATE TABLE Orders (
    OrderID INT PRIMARY KEY,
    CustomerID INT NOT NULL,
    OrderDate DATE DEFAULT GETDATE(),
    PaymentStatus NVARCHAR(20) DEFAULT 'Pending'
);

この例では、新しい注文が追加される際に、OrderDateが指定されなければ現在の日付が、PaymentStatusが指定されなければ'Pending'(保留中)が自動設定されます。

実例2: 会員登録データの管理

CREATE TABLE Members (
    MemberID INT PRIMARY KEY,
    MemberName NVARCHAR(100),
    MembershipType NVARCHAR(20) DEFAULT 'Regular',
    JoinDate DATE DEFAULT GETDATE()
);

演習問題

以下の演習を通して、DEFAULT制約の理解を深めてみましょう。

問題1: 新しいテーブルを作成

以下の要件を満たすテーブルを作成してください。

  1. テーブル名はProducts
  2. 列は以下の通り:
    • ProductID: 整数型、主キー
    • ProductName: 文字列型(最大100文字)
    • Category: 文字列型(最大50文字)、デフォルト値は'General'
    • Price: 数値型、デフォルト値は0.0
    • CreatedDate: 日付型、デフォルトで現在の日付を設定

問題2: DEFAULT制約の追加

既存のテーブルOrdersに対して、ShippingStatus列を追加し、デフォルト値を'Not Shipped'としてください。

問題3: DEFAULT制約の削除

OrdersテーブルのPaymentStatus列に設定されたDEFAULT制約を削除してください。


演習問題の解答例

解答1: 新しいテーブルの作成

CREATE TABLE Products (
    ProductID INT PRIMARY KEY,
    ProductName NVARCHAR(100),
    Category NVARCHAR(50) DEFAULT 'General',
    Price DECIMAL(10, 2) DEFAULT 0.0,
    CreatedDate DATE DEFAULT GETDATE()
);

解答2: DEFAULT制約の追加

ALTER TABLE Orders
ADD ShippingStatus NVARCHAR(20) DEFAULT 'Not Shipped';

解答3: DEFAULT制約の削除

ALTER TABLE Orders DROP CONSTRAINT DF_PaymentStatus;

まとめ

DEFAULT制約は、SQL Serverでのデータの管理において非常に便利なツールです。

デフォルト値を設定することで、データの一貫性を確保し、エラーを防ぎつつコードを簡潔に保つことができます。この記事を参考に、ぜひ実践で活用してみてください。

演習問題を通じて、実際にSQLを動かしてみることで理解が深まるはずです!