2

1つのクエリで1対多の関係を持つ行を削除するためのよりクリーンな方法を誰かが提案できますか?

これは機能しますが、私はusing句またはをよく知らないdeleteので、それがどのように機能するかを完全には理解していません。

DELETE FROM ip_record,
            entry using ip_record 
            inner join entry 
      where ip_record.site_id = ? 
        and ip_record.ip = ? 
        and ip_record.id = entry.ip_id

私はこれがカスケードでよりきれいに行われることができるという考えを持っています、しかし私は制約の不合理な恐れを持っています。DBはMySQLです。

4

1 に答える 1

4

はい、次のように制約を追加します

ALTER TABLE entry
    ADD CONSTRAINT constr_entry_fk_ip
    FOREIGN KEY fk_ip (ip_id) REFERENCES ip_record (id)
    ON DELETE CASCADE ON UPDATE CASCADE

そして、あなたはただ使うことができます

DELETE FROM ip_record
WHERE ip_record.site_id=? and ip_record.ip=?

以前に参加が必要だったことを実行します。

于 2010-06-30T17:59:02.813 に答える