2010-06-30 2 views
2

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

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

ответ

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

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

+1

Спасибо, я очень благодарен за то, что вы прошли через меня! – JAL

Смежные вопросы