制約(制約)テーブルの強力なSQL Server
- 12-09-2022
- Toanngo92
- 0 Comments
Mục lục
制約の導入(制約)
SQL Serverの重要な機能の1つは、データの整合性を維持および実施することです。これを実現する方法はいくつかありますが、最も一般的に使用され、推奨される方法の1つは、制約を使用することです。制約は、テーブル内の1つの列または列のセットに割り当てられた属性であり、ある種の一貫性のないデータ値が入力されるのを防ぎます。制約は、ビジネスロジックルールを適用し、データの整合性を強化するために使用されます。
制約は、テーブルの作成時に作成するか、テーブル定義の一部であるか、作成中にテーブルに含めるか、作成後に含めることができます。制約は、列制約とテーブル制約に分類できます。
- テーブルの制約:テーブル内の複数の列に適用でき、列の定義とは無関係に宣言されます。制約に複数の列がある場合は、テーブル制約を使用する必要があります
- 列の制約:列定義の一部として記述され、その列にのみ適用されます。
SQL Serverの制約の種類:
- 主キー
- 個性的
- 外部キー
- 小切手
- NULLではありません
PRIMARY KEY(プライマリキー)
テーブルには通常、テーブル内の各行を一意に識別するための一意の列または列の組み合わせで構成される主キーがあります。 PRIMARY KEY制約は、テーブル内のエンティティの整合性を確保する目的で主キーを生成するために使用されます。
注:テーブルでは、作成できるPRIMARYKEYは1つだけです。
テーブル内の2つの行に同じ主キー値を設定することはできません。また、主キーである列にNULL値を設定することはできません。したがって、主キー制約が既存のテーブル列に追加されると、SQLServerは主キーのルールが守られているかどうかを確認します。既存の列が主キー規則に準拠していない場合、制約は追加されず、エラーが返されます。
ドキュメント: https ://docs.microsoft.com/en-us/sql/relational-databases/tables/create-primary-keys?view = sql-server-ver15
テーブルの追加中に主キーを列に追加するための構文:
CREATE TABLE <table_name> (Column_Name datatype PRIMARY KEY [,column_list])
例えば:
create database empDB GO use empDB GO create table EmpContactPhone (Employee_ID int primary key, MobileNumber bigint, serviceProvider varchar(30), LandlineNumber bigint)
コマンドを正常に実行すると、Employee_ID列を主キーとしてempDBデータベースが作成されます。
テーブルの編集時に主キーを列に追加する構文:
ALTER TABLE <table_name> ADD PRIMARY KEY (<column_name>)
例えば:
create database empDB GO use empDB GO create table EmpContactPhone (Employee_ID int, MobileNumber bigint, serviceProvider varchar(30), LandlineNumber bigint) use empDB GO alter table EmpContactPhone alter column Employee_ID int not null; GO alter table EmpContactPhone ADD PRIMARY KEY(Employee_ID) ;
UNIQUE(ユニーク)
一意の制約は、一意の値のみが列または列のセットに入力されるようにするために使用されます。これにより、開発者は重複する値が入力されていないことを確認できます。主キーは常に一意です。制約が適用されると、テーブル内の2つの行が列に対して同じ値を持つことはできないため、 UNIQUEキーはエンティティの整合性を強制します。 UNIQUE制約はnull値を許可します。テーブルには複数のUNIQUE制約を含めることができます。
構文:
create table <table_name> ([column_list,] <column_name> <data_type> UNIQUE [,column_list])
例えば:
create table EmpContactPhoneUnique (Employee_ID int, MobileNumber bigint unique, serviceProvider varchar(30), LandlineNumber bigint)
上記の構文では、以外の重複がある場合にMobileNumber列にデータを挿入すると、SQLは次のようなエラーを報告します。
insert into EmpContactPhoneUnique values (1,0782222567,'vinaphone','84') insert into EmpContactPhoneUnique values (2,0782222567,'vinaphone','84')
FOREIGN KEY(外部キー)
テーブル内の外部キーは、テーブル内の主キーまたは一意の列を指す列です。外部キー制約は、参照整合性を適用するために使用されます。外部キーは、リレーショナルデータベーススキーマを形成するための2つのテーブル間の関係として理解できます。
注:このテーブルの外部キーは、別のテーブルの主キーに関連付ける必要があります。そうしないと、初期化ステートメントでエラーが発生します。
ドキュメント: https ://docs.microsoft.com/en-us/sql/relational-databases/tables/create-foreign-key-relationships?view = sql-server-ver15
外部キーの構文は次のとおりです。
CREATE TABLE <table_name1>([column_list,]) <column_name> <datatype> FOREIGN KEY REFFERENCES <table_name> (<pk_column_name> [,column_list])
説明:
- table_name:主キー列が参照されるテーブルの名前
- <pk_column_name>:テーブルの主キー列名
例えば:
create database empDB GO use empDB GO create table EmpContactPhone (Employee_ID int, MobileNumber bigint, serviceProvider varchar(30), LandlineNumber bigint) use empDB GO alter table EmpContactPhone alter column Employee_ID int not null; GO alter table EmpContactPhone ADD PRIMARY KEY(Employee_ID) ; create table EmpPhoneExpenses (Expense_ID int primary key identity, Employee_ID int FOREIGN KEY REFERENCES EmpContactPhone(Employee_ID),Amount bigint)
上記の例では、 EmpContactPhoneテーブルのEmployee_ID列に外部キーがあることを理解し、それをEmpContactPhoneテーブルの主キーであるEmployee_ID列に関連付けています。
小切手
この制約は、列に配置できる値の制限を確認するために使用されます。 CHECK制約は、データの整合性を強制します。
たとえば、投票者の年齢を表す列に入力された値が18以上でなければならない場合、チェック制約が導入される可能性があります。
列に入力されたデータが条件に一致しない場合、挿入は失敗します。
チェック制約は、TRUE、FALSE、またはundefinedに評価できる検索条件を指定することによって機能します。 FALSEと評価された値は拒否されます。 1つの列に複数のTEST制約を指定できます。単一のCHECK制約は、テーブルレベルで作成することにより、複数の列に適用することもできます。
構文:
ドキュメント: https ://docs.microsoft.com/en-us/sql/relational-databases/tables/create-check-constraints?view = sql-server-2017
例えば:
create table Employee (ID int primary key identity, Name nvarchar(30), Phone varchar(30), Age int check (Age > 18))
次のステップでは、制約に違反するデータを使用して、従業員テーブルへの挿入データをテストしてみてください。
insert into Employee values (N'Toan Ngo Vinh','0911111111',15)
NULLではありません
null以外の制約により、列の値をnullにすることはできません。 CHECK .制約と同様に、データの整合性とロジックを保証するために使用されます