Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (日本語) » SQL Anywhere サーバ - SQL の使用法 » データベースの作成 » データ整合性の確保 » エンティティ整合性と参照整合性の確保 » 参照整合性の検査

 

INSERT 文の整合性検査

SQL Anywhere は、INSERT 文の実行時に整合性検査を実行します。たとえば、部署を新設しようとする場合に、すでに使用されている DepartmentID 値を指定すると仮定します。

INSERT
INTO Departments ( DepartmentID, DepartmentName, DepartmentHeadID )
VALUES ( 200, 'Eastern Sales', 902 );

テーブルのプライマリ・キーがユニークでなくなるため、INSERT は拒否されます。DepartmentID カラムはプライマリ・キーなので、重複する値は許可されません。

関係に違反する値の挿入

次の文は SalesOrders テーブルに新しいローを挿入しますが、Employees テーブル内には存在しない SalesRepresentative ID を誤って指定します。

INSERT
INTO SalesOrders ( ID, CustomerID, OrderDate, SalesRepresentative)
VALUES ( 2700, 186, '2000-10-19', 284 );

Employees テーブルと SalesOrders テーブルとの関係は、SalesOrders テーブルの SalesRepresentative カラムと Employees テーブルの EmployeeID カラムに基づいた 1 対多の関係です。プライマリ・テーブル (Employees) にレコードが入力されている場合にのみ、外部テーブル (SalesOrders) 内の対応するレコードを挿入できます。

外部キー

Employees テーブルのプライマリ・キーは従業員 ID 番号です。SalesRepresentative テーブル内の営業担当者 ID 番号は、Employees テーブルの外部キーです。つまり、SalesOrders テーブル内にある各営業担当者 ID 番号と、Employees テーブル内にある同じ従業員の従業員 ID 番号を一致させる必要があります。

ID 番号が 284 の営業担当者に対して注文を追加しようとすると、「テーブル 'SalesOrders' の外部キー 'FK_SalesRepresentative_EmployeeID' に対するプライマリ・キーの値がありません。」のようなエラー・メッセージが表示されます。

Employees テーブルには、その ID 番号を持つ従業員は存在しません。これによって、有効な営業担当者 ID のない注文が挿入されるのを防ぐことができます。

参照