Как изменить этот оператор удаления из нескольких таблиц - PullRequest
2 голосов
/ 30 июня 2010

Кто-нибудь может предложить более чистый метод удаления строк с отношением один-ко-многим в одном запросе?

Это работает, но я не очень знаком с предложением 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

У меня есть представление, что это можно сделать более чисто с помощью каскада, но у меня есть иррациональный страх ограничений. БД MySQL.

1 Ответ

4 голосов
/ 30 июня 2010

Да, добавьте ограничение следующим образом

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=?

, чтобы сделать то, что ранее требовало объединения.

...