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
);
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
);
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
);
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)
);
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)
);
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()
);
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()
);
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()
);
これらの制約を通じて、データベース管理システムはデータの一貫性、整合性、正確性を保証できます。
以下の章では、各制約について詳しく説明します。
その他の拡張