2009-05-14 15 views
3

こんにちはみんな外部キーリレーショナルテーブルがあり、テーブル内のレコードを削除私はデータベースに新しいです

私の質問は、私は2つのテーブルの従業員を持っていると仮定し、外部キー関係 を持つテーブル内のレコードを削除する方法です& deptIDの関係が になりました。私は部門内の従業員が削除されていても外部キーの関係を維持したい場合、「depID = 10の部門から削除」のような表の特定の行を削除します。誰かがplzはこの

おかげ

+0

depID従業員からの削除へのリンクだどこあなたは、これはRESTRICTとEMPの削除最初の操作を行う指定するために、その優れた、その後、毎回起こるしたくない場合= 10? –

答えて

2

を行うための私のクエリを提供することができますあなたはemployeeテーブルにその削除カスケードを指定する必要があります。これを行う方法はデータベースに少し依存しますが、ほぼすべてのデータベースがカスケード削除をサポートしています。 SQL Server内の例えば

:SQL Serverでの

CREATE TABLE Employee 
(
    DepId INT NOT NULL REFERENCES Department(DepId) ON DELETE CASCADE 
) 
+0

すべてのデータベースがカスケード削除をサポートするわけではありません。 –

+0

それを知らなかった。どの人はいないの?私が知っているものは、Oracle、SQL Server、MySQL、PostgreSQL、DB2です。もちろん、これらは主要なものです。 –

+0

まあ、MySQLはInnoDBを使用している場合にのみカスケード削除をサポートしますが、MyISAMは外部キーをまったくサポートしていないので、 – Kris

0

CASCASEが、代わりに

DELETEの最初の従業員テーブルに対してDELETEを実行し、次いで第2に対してDELETEとしてあなたが関係をマークしますDepartmentsテーブル。

1

これは、データベースと関係をどのように定義したかによって異なります。カスケードに削除を引き起こす可能性があります。つまり、親を削除すると子レコードが削除されます。つまり、子リレーションがFKフィールドにNULLを持つようになります。それはあなたのニーズに依存します。通常、私はNULLIFYまたはCASCADEを定義せず、必要に応じて各レコードを削除しますが、これは自動的に処理されません。

0

外部キーの関係を確立すると、(MS SQL Serverでは、とにかく)更新と削除で実行されるアクションを定義できます。たとえば、「部署のレコードが削除されたときに、そのレコードを参照する子テーブルにカスケードする」と言うことができます。詳細はhereをご覧ください。 (あなたがDBが使用されている指定されていないので)

0

DB2構文:

Create table Employee 
... 
... 
FOREIGN KEY (deptID) REFERENCES department (deptID) 
    ON DELETE CASCADE 

あなたはCASCADEオプションを指定した場合DEPTが削除される場合には、従業員が削除されます。

CASCADEの代わりにRESTRICTを指定すると、deptに属するすべての従業員が最初に削除されない限り、deptを削除できません。代わりに

REQD

Delete * from Employee where deptID = 10; 
Delete * from Dept where deptID = 10; 

はここexamples

関連する問題