こんにちはみんな外部キーリレーショナルテーブルがあり、テーブル内のレコードを削除私はデータベースに新しいです
私の質問は、私は2つのテーブルの従業員を持っていると仮定し、外部キー関係 を持つテーブル内のレコードを削除する方法です& deptIDの関係が になりました。私は部門内の従業員が削除されていても外部キーの関係を維持したい場合、「depID = 10の部門から削除」のような表の特定の行を削除します。誰かがplzはこの
おかげ
こんにちはみんな外部キーリレーショナルテーブルがあり、テーブル内のレコードを削除私はデータベースに新しいです
私の質問は、私は2つのテーブルの従業員を持っていると仮定し、外部キー関係 を持つテーブル内のレコードを削除する方法です& deptIDの関係が になりました。私は部門内の従業員が削除されていても外部キーの関係を維持したい場合、「depID = 10の部門から削除」のような表の特定の行を削除します。誰かがplzはこの
おかげ
を行うための私のクエリを提供することができますあなたはemployee
テーブルにその削除カスケードを指定する必要があります。これを行う方法はデータベースに少し依存しますが、ほぼすべてのデータベースがカスケード削除をサポートしています。 SQL Server内の例えば
:SQL Serverでの
CREATE TABLE Employee
(
DepId INT NOT NULL REFERENCES Department(DepId) ON DELETE CASCADE
)
すべてのデータベースがカスケード削除をサポートするわけではありません。 –
それを知らなかった。どの人はいないの?私が知っているものは、Oracle、SQL Server、MySQL、PostgreSQL、DB2です。もちろん、これらは主要なものです。 –
まあ、MySQLはInnoDBを使用している場合にのみカスケード削除をサポートしますが、MyISAMは外部キーをまったくサポートしていないので、 – Kris
CASCASEが、代わりに
DELETEの最初の従業員テーブルに対してDELETEを実行し、次いで第2に対してDELETEとしてあなたが関係をマークしますDepartmentsテーブル。
これは、データベースと関係をどのように定義したかによって異なります。カスケードに削除を引き起こす可能性があります。つまり、親を削除すると子レコードが削除されます。つまり、子リレーションがFKフィールドにNULLを持つようになります。それはあなたのニーズに依存します。通常、私はNULLIFYまたはCASCADEを定義せず、必要に応じて各レコードを削除しますが、これは自動的に処理されません。
外部キーの関係を確立すると、(MS SQL Serverでは、とにかく)更新と削除で実行されるアクションを定義できます。たとえば、「部署のレコードが削除されたときに、そのレコードを参照する子テーブルにカスケードする」と言うことができます。詳細はhereをご覧ください。 (あなたがDBが使用されている指定されていないので)
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
depID従業員からの削除へのリンクだどこあなたは、これはRESTRICTとEMPの削除最初の操作を行う指定するために、その優れた、その後、毎回起こるしたくない場合= 10? –