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

SQL Anywhere 12.0.1 » SQL Anywhere サーバー SQL の使用法 » テーブル、ビュー、インデックス » 外部キー

 

外部キーの作成 (SQL の場合)

Interactive SQL では、CREATE TABLE 文と ALTER TABLE 文を使用して、外部キーを作成、修正できます。これらの文によって、カラムの制約や検査など、多くのテーブル属性を設定できます。

前提条件

DBA 権限を所有しているか、テーブルの所有者でなければなりません。

内容と備考

次のとおりです。

 ♦ SQL を使用した外部キーの作成
  1. DBA 権限のあるユーザーとしてデータベースに接続します。

  2. ALTER TABLE 文を実行します。

結果

外部キー定義を含めるよう、テーブルの定義は更新されます。

次の手順

なし。

次の例では、スキルの一覧を格納する Skills というテーブルを作成し、次に Skills テーブルに対して外部キーの関係を持つ EmployeeSkills というテーブルを作成します。EmployeeSkills.SkillID は、Skills テーブルのプライマリキーカラム (Id) と外部キーの関係があります。



CREATE TABLE Skills (
   Id INTEGER PRIMARY KEY,
   SkillName CHAR(40),
   Description CHAR(100) 
);
CREATE TABLE EmployeeSkills (
   EmployeeID INTEGER NOT NULL,
   SkillID INTEGER NOT NULL,
   SkillLevel INTEGER NOT NULL,
   PRIMARY KEY( EmployeeID ),
   FOREIGN KEY (SkillID) REFERENCES Skills ( Id )
);

テーブルを作成した後で、ALTER TABLE 文を使用して外部キーを追加することもできます。次の例では、前の例で作成したテーブルに似たテーブルを作成します。ただし、テーブルの作成後に外部キーを追加します。



CREATE TABLE Skills2 (
   ID INTEGER PRIMARY KEY,
   SkillName CHAR(40),
   Description CHAR(100) 
);
CREATE TABLE EmployeeSkills2 (
   EmployeeID INTEGER NOT NULL,
   SkillID INTEGER NOT NULL,
   SkillLevel INTEGER NOT NULL,
   PRIMARY KEY( EmployeeID ),
);
ALTER TABLE EmployeeSkills2
   ADD FOREIGN KEY SkillFK ( SkillID )
   REFERENCES Skills2 ( ID );

外部キーを作成するとき、そのプロパティを指定できます。たとえば、次の文は例 2 と同じ外部キーを作成しますが、この外部キーは、更新または削除に対する制限がある NOT NULL として定義されています。

ALTER TABLE Skills2
ADD NOT NULL FOREIGN KEY SkillFK ( SkillID )
REFERENCES Skills2 ( ID )
ON UPDATE RESTRICT
ON DELETE RESTRICT;

外部キーカラム名とプライマリキーのカラム名とは、1 対 1 で対応する 2 つのリスト位置に従ってペアになります。外部キーの定義時にプライマリテーブルのカラム名が指定されていない場合、プライマリキーカラムが使用されます。たとえば、次のようにして 2 つのテーブルを作成するとします。

CREATE TABLE Table1( a INT, b INT, c INT, PRIMARY KEY ( a, b ) );
CREATE TABLE Table2( x INT, y INT, z INT, PRIMARY KEY ( x, y ) );

次に、外部キー fk1 を作成し、2 つのテーブル間でのカラムのペア方法を厳密に指定します。

ALTER TABLE Table2 ADD FOREIGN KEY fk1( x,y ) REFERENCES Table1( a, b );

次の文を使用して、外部テーブルカラムのみを指定することで、2 つ目の外部キー fk2 を作成します。データベースサーバーは、これらの 2 つのカラムを、プライマリテーブル上のプライマリキーにある最初の 2 つのカラムと自動的にペアにします。

ALTER TABLE Table2 ADD FOREIGN KEY fk2( x, y ) REFERENCES Table1;

次の文を使用して、プライマリテーブルと外部テーブルのいずれに対してもカラムを指定せずに外部キーを作成します。

ALTER TABLE Table2 ADD FOREIGN KEY fk3 REFERENCES Table1;

参照元カラムを指定していないため、データベースサーバーは、プライマリテーブル (Table1) のカラムと同じ名前を持つカラムを外部テーブル (Table2) で検索します。同じ名前のカラムが存在する場合、データ型が一致することを確認し、それらのカラムを使用して外部キーを作成します。カラムが存在しない場合は、Table2 に作成されます。この例では、Table2 には a や b というカラムが存在しないため、Table1.a および Table1.b と同じデータ型で作成されます。このように自動的に作成されたカラムは、外部テーブルのプライマリーキーの一部になることはできません。


 参照