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 の使用法 » データベースの作成 » データ整合性の確保 » エンティティ整合性と参照整合性の確保

 

参照整合性の検査

参照性制約に違反する可能性があるとして RESTRICT などの制限が定義されている外部キーの検査は、デフォルトで文の実行時に行われます。CHECK ON COMMIT 句を指定した場合、検査が行われるのはトランザクションのコミット時にかぎられます。

検査のタイミングを制御するデータベース・オプション

参照整合性に違反する操作を制限するよう定義されている外部キーは、wait_for_commit データベース・オプションを使ってその動作を制御できます。このオプションは、CHECK ON COMMIT 句によって無効になります。

デフォルトでは wait_for_commit が Off に設定されており、データベースに整合性違反を生じさせる可能性のある操作は実行できません。たとえば、従業員がまだ存在している部署に対する DELETE は実行できません。次の文を実行すると、エラーになります。

DELETE FROM Departments
WHERE DepartmentID = 200;

wait_for_commit を On にすると、実際にコミットが実行されるまで参照整合性は検査されません。データベースの整合性が失われていると、データベースはコミットの実行を許可せずにエラーを返します。このモードの場合、データベース・ユーザはまだ従業員がいる部署を削除できますが、以下の操作が終了しないかぎり変更をコミットできません。

  • その部署に所属する従業員を削除するか、もしくは他の部署に移す。

  • DepartmentID ローを Departments テーブルに戻す。

  • トランザクションをロールバックして、DELETE 操作を取り消す。


INSERT 文の整合性検査
DELETE 文または UPDATE 文の整合性検査