T-SQLとSSMSを使用してSQL Serverテーブルを拡張する:包括的なチュートリアル
SQL Serverでテーブルを変更し、名前付きデフォルト制約と名前付き外部キー制約を含む列を追加する方法
このチュートリアルでは、SQL Serverで既存のテーブルに列を追加し、その列に名前付きデフォルト制約と名前付き外部キー制約を設定する方法を説明します。 データベースのスキーマを変更する際に役立つ高度なテクニックです。
前提条件
このチュートリアルを実行するには、次のものが必要です。
- SQL Serverデータベース
- テーブルを変更する権限
- 使用する列と制約に関する十分な情報
手順
- ALTER TABLE ステートメントを使用する
既存のテーブルに列を追加するには、ALTER TABLE
ステートメントを使用します。 このステートメントには、追加する列の名前、データ型、およびオプションの制約を指定するオプションが含まれています。
ALTER TABLE table_name
ADD column_name data_type [CONSTRAINT constraint_name DEFAULT default_value]
[REFERENCES referenced_table_name (referenced_column_name)]
- 名前付きデフォルト制約を追加する
列にデフォルト値を割り当てるには、DEFAULT
キーワードを使用します。 デフォルト値は、列に明示的に値が挿入されない場合に割り当てられる値です。
ALTER TABLE customers
ADD email VARCHAR(50) CONSTRAINT DEF_Email DEFAULT '[email protected]'
列が別のテーブルの列を参照する必要がある場合は、FOREIGN KEY
制約を使用します。 この制約は、参照整合性を保証し、データの無整合性を防ぐのに役立ちます。
ALTER TABLE orders
ADD customer_id INT
CONSTRAINT FK_Orders_Customers
REFERENCES customers (customer_id)
例
次の例では、Customers
テーブルに Email
列と CustomerID
列を追加する方法を示します。 Email
列にはデフォルト値が設定され、CustomerID
列には外部キー制約が設定されます。
ALTER TABLE Customers
ADD Email VARCHAR(50) CONSTRAINT DEF_Email DEFAULT '[email protected]',
CustomerID INT CONSTRAINT FK_Customers_Orders
REFERENCES Orders (CustomerID);
補足
ALTER TABLE
ステートメントを使用して、列のデータ型、NULL許容性、およびその他のプロパティを変更することもできます。- 既存の制約を削除するには、
DROP CONSTRAINT
ステートメントを使用します。 - 詳細については、SQL Serverのドキュメントを参照してください。
-- サンプルテーブルを作成
CREATE TABLE Customers (
CustomerID INT IDENTITY PRIMARY KEY,
FirstName VARCHAR(50) NOT NULL,
LastName VARCHAR(50) NOT NULL
);
CREATE TABLE Orders (
OrderID INT IDENTITY PRIMARY KEY,
CustomerID INT NOT NULL,
OrderDate DATE NOT NULL,
FOREIGN KEY (CustomerID) REFERENCES Customers (CustomerID)
);
-- サンプルコードの説明
このサンプルコードでは、2つのテーブル、`Customers` と `Orders` を作成します。
**Customers テーブル:**
* `CustomerID` 列は、主キーであり、自動的に増分される整数値です。
* `FirstName` 列は、顧客の姓を格納する文字列型です。
* `LastName` 列は、顧客の苗字を格納する文字列型です。
**Orders テーブル:**
* `OrderID` 列は、主キーであり、自動的に増分される整数値です。
* `CustomerID` 列は、`Customers` テーブルの `CustomerID` 列を参照する外部キーです。 この列は、注文を配置した顧客を識別します。
* `OrderDate` 列は、注文日が格納される日付型です。
このサンプルコードは、テーブルを作成し、列間に関係を作成する方法を示す基本的な例です。 実際のデータベーススキーマは、アプリケーションの要件に応じて複雑になる可能性があります。
**追加の例:**
* 列にデフォルト値を追加するには、`DEFAULT` キーワードを使用します。 例えば、次のコードは `Customers` テーブルに `Email` 列を追加し、その列にデフォルトの電子メールアドレスを設定します。
```sql
ALTER TABLE Customers
ADD Email VARCHAR(50) DEFAULT '[email protected]';
- 列にチェック制約を追加するには、
CHECK
キーワードを使用します。 例えば、次のコードはCustomers
テーブルのAge
列に、値が 18 以上であることを確認するチェック制約を追加します。
ALTER TABLE Customers
ADD Age INT CHECK (Age >= 18);
SQL Serverでテーブルを変更し、名前付きデフォルト制約と名前付き外部キー制約を含む列を追加するその他の方法
方法
- SQL Server Management Studio (SSMS) を使用する
SSMS は、SQL Serverとやり取りするためのグラフィカルツールです。 テーブルを変更するには、次の手順を実行します。
- SSMS でデータベースに接続します。
- オブジェクト エクスプローラーで、変更するテーブルをナビゲートします。
- テーブルを右クリックし、[列の追加] を選択します。
- [列の追加] ダイアログボックスで、次の情報を入力します。
- 列の名前
- データ型
- デフォルト値 (オプション)
- 列が NULL を許容するかどうか
- [外部キー] タブをクリックして、外部キー制約を定義します。
- 参照するテーブルを選択します。
- [更新の一貫性を保持する] オプションを選択して、参照整合性を保証します。
- [OK] をクリックして、変更を保存します。
- [列の追加] ダイアログボックスで、次の情報を入力します。
- 列の名前:
Email
- データ型:
VARCHAR(50)
- デフォルト値:
'[email protected]'
- NULL 許容:
はい
- 列の名前:
- [外部キー] タブをクリックします。
- 参照するテーブル:
Orders
- 参照する列:
CustomerID
ALTER TABLE
ステートメントを使用して、T-SQL スクリプトを生成することもできます。 SSMS の [スクリプト] メニューを使用して、この機能にアクセスできます。
sql-server