2016-09-29 16 views
1

私はデータを持つ2つのテーブルを持っています。 両方のテーブルの行を削除します。 しかし、私はそれらの間に外部キーを持っています。 どうすればいいですか?Mysql:外部キーを持つ2つのテーブルの行を削除

departure 
    id departure_date 
     1  2016-09-29 
     2  2016-09-30 

departure_time 
    id departure_id (fk) 
     1   1 
     2   2 

最も良いことは、すべての行が削除され、両方の表の行が同時に削除されるというクエリがあることです。 制約/ FKを削除せずにこれを行う方法はありますか?この例では

が、私は2016年9月30日

日から、すべての逸脱を削除したいと言う(:ID 2とdeparture_timeの:ID:出発を削除2)のMySQLでは

答えて

3

これを試してください、それが助けてくれることを祈ってください。

DELETE FROM departure, departure_time 
USING departure 
INNER JOIN departure_time 
WHERE departure_date = '2016-09-30' 
     AND departure_time.id = departure.id 

それとも

DELETE FROM departure, departure_time 
USING departure 
INNER JOIN departure_time 
WHERE departure_date = '2016-09-30' 
     AND departure_time.departure_id = departure.id 

またはあなたはあなたのために自動的に作業を行いますON DELETE CASCADEを使用することができます。

+0

こんにちはMumesh、私は間違っているか、あなたが書いた2つの質問は同じですか?相違点を強調していただきありがとうございます。 – Robert

+0

彼は2つの異なる列 'id'と' departure_id'を使用していますが、 'departure_id'だけが正しいものです。 – Manatax

4

、あなたもできます1つのステートメントで複数のテーブルから削除します。

delete d, dt 
    from departure d join 
     departure_time dt 
     on d.id = dt.departure_id 
    where departure_date = '2016-09-30'; 

別の解決策は、on delete cascadeとして外部キー関係を宣言することです。元のテーブルの行を削除すると、データベースは2番目のテーブルの関連レコードを削除します。

+0

ご回答いただきありがとうございます。しかし、これはうまくいかなかった。 dt.idをdt.departure_idに変更した場合 エラーが発生しました 親行を削除または更新できません:外部キー制約が失敗しました( 'osl'.departure_time'、CONSTRAINT' departure_time_departure_fk')FOREIGN KEY(' departure_id' )参照 'departure'(' id')) – TorK

+0

しかし削除カスケードを追加するとうまくいきました:) – TorK

+0

@Tork。 。 。おっと、私は列の関係を誤解しました。 –

関連する問題