MySQL 3 tablolardan silinemedi

2 Cevap php

Benim veritabanında bu tuşları ile, aşağıdaki tablolar vardır:

bookings session_id

sessions session_id course_id

courses course_id

Ben tek bir ders (course_id) ile ilgili tüm tarihi silmek için bir sorgu oluşturmak istiyorum. Ben course_id = 10 silmek istedim Örneğin, eğer ben silinecek = 10 course_id ile herhangi oturumları isterim, ek olarak, bu oturumların herhangi biri ile ilgili herhangi bir rezervasyonlar çok silinmesi gerekir.

Bu mümkün mü? bu yaklaşım için en iyi yolu nedir? (PHP yazıyorum.)

Herhangi bir yardım çok takdir!

2 Cevap

MySQL supports multi-table deletes:

DELETE FROM REZERVASYON 
 USING REZERVASYON JOIN OTURUMU JOIN DERSLER
 WHERE REZERVASYON.session_id = OTURUMU.session_id
   AND OTURUMU.course_id = DERSLER.course_id
   AND DERSLER.course_id = ?

Başka bir alternatif stored procedure kullanımı ve doğru sırayla silme işlemek olacaktır:

  1. REZERVASYON

    DELETE FROM REZERVASYON
     WHERE EXISTS(SELECT NULL
                    FROM OTURUMU s 
                   WHERE s.session_id = session_id
                     AND s.course_id = ?)
    
  2. OTURUMU

    DELETE FROM OTURUMU
     WHERE EXISTS(SELECT NULL
                    FROM DERSLER c
                   WHERE c.course_id = course_id
                     AND c.course_id = ?)
    
  3. DERSLER

    DELETE FROM DERSLER
     WHERE course_id = ?
    

Ben en iyi yolu doğru yabancı anahtarları (aslında mysql çalışmak için bu için InnoDB kullanmak gerekecek) ve 'ON DELETE CASCADE' için FKs davranışını ayarlama ekleyerek tabloları yapılandırmak olacağını düşünüyorum. Eğer dersler tablosundan şey sildiğinizde bu şekilde, ilgili rezervasyon ve oturumları otomatik olarak silinecektir.

Bazı linksies: