SQL 制約(Constraints)


SQL 制約(Constraints)

SQL 制約は、テーブル内のデータルールを規定するために使用されます。

制約に違反するデータ操作がある場合、その操作は制約によって終了されます。

制約は、テーブル作成時(CREATE TABLE 文を使用)またはテーブル作成後(ALTER TABLE 文を使用)に規定できます。

SQL CREATE TABLE + CONSTRAINT 構文

CREATE TABLE table_name
(
    column_name1 data_type(size) constraint_name,
    column_name2 data_type(size) constraint_name,
    column_name3 data_type(size) constraint_name,
    ....
);

SQL には、次のような制約があります。

  • NOT NULL- ある列に NULL 値を格納できないことを指定します。
  • UNIQUE- ある列の各行が一意の値を持つことを保証します。
  • PRIMARY KEY- NOT NULL と UNIQUE の組み合わせ。ある列(または2つ以上の列の組み合わせ)が一意の識別子を持つことを保証し、テーブル内の特定のレコードをより簡単かつ迅速に見つけるのに役立ちます。
  • FOREIGN KEY- あるテーブルのデータが別のテーブルの値と一致することを保証する参照整合性。
  • CHECK- 列の値が指定された条件に適合することを保証します。
  • DEFAULT- 列に値が割り当てられていない場合のデフォルト値を規定します。
  • INDEX- データベーステーブルのデータに高速にアクセスするために使用されます。

1. NOT NULL

列が NULL 値を持つことができないことを保証します。

例

CREATE TABLE Students (
    StudentID INT NOT NULL,
    LastName VARCHAR(50) NOT NULL,
    FirstName VARCHAR(50),
    Age INT
);

2. UNIQUE

列内のすべての値が一意であることを保証します。

例

CREATE TABLE Employees (
    EmployeeID INT NOT NULL UNIQUE,
    LastName VARCHAR(50) NOT NULL,
    FirstName VARCHAR(50),
    Email VARCHAR(100) UNIQUE
);

3. PRIMARY KEY

テーブル内の各行レコードを一意に識別します。PRIMARY KEY 制約は NOT NULL と UNIQUE の組み合わせです。

例

CREATE TABLE Orders (
    OrderID INT NOT NULL PRIMARY KEY,
    OrderNumber INT NOT NULL,
    OrderDate DATE NOT NULL
);

4. FOREIGN KEY

あるテーブルの値が別のテーブルの値と一致することを保証し、2つのテーブル間の関係を確立します。

例

CREATE TABLE Orders (
    OrderID INT NOT NULL PRIMARY KEY,
    OrderNumber INT NOT NULL,
    CustomerID INT,
    FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID)
);

5. CHECK

列の値が特定の条件を満たすことを保証します。

例

CREATE TABLE Products (
    ProductID INT NOT NULL PRIMARY KEY,
    ProductName VARCHAR(100) NOT NULL,
    Price DECIMAL(10, 2) CHECK (Price >= 0)
);

6. DEFAULT

列にデフォルト値を設定します。

例

CREATE TABLE Customers (
    CustomerID INT NOT NULL PRIMARY KEY,
    LastName VARCHAR(50) NOT NULL,
    FirstName VARCHAR(50),
    JoinDate DATE DEFAULT GETDATE()
);

7. INDEX

データベーステーブルのデータに高速にアクセスするために使用されます。

CREATE INDEX idx_lastname ON Employees (LastName);

総合サンプル

例

CREATE TABLE Students (
    StudentID INT NOT NULL PRIMARY KEY,
    LastName VARCHAR(50) NOT NULL,
    FirstName VARCHAR(50) NOT NULL,
    Age INT CHECK (Age >= 18),
    Email VARCHAR(100) UNIQUE,
    EnrollmentDate DATE DEFAULT GETDATE()
);

これらの制約を通じて、データベース管理システムはデータの一貫性、整合性、正確性を保証できます。

以下の章では、各制約について詳しく説明します。

その他の拡張