MySQL'deki ON DELETE CASCADE deyimi otomatik olarak kullanılır. kaldırmak Ana tablodan satırları sildiğimizde eşleşen kayıtları alt tablodan alırız. Bu, konuyla ilgili bir tür referans eylemidir. yabancı anahtar .
Yabancı anahtar ilişkisinde YABANCI ANAHTAR ile iki tablo oluşturduğumuzu ve her iki tabloyu da ebeveyn ve çocuk haline getirdiğimizi varsayalım. Daha sonra, bir FOREIGN KEY için, diğerinin basamaklama işlemlerinde başarılı olması için ayarlanması gereken bir ON DELETE CASCADE cümleciği tanımlarız. ON DELETE CASCADE yalnızca bir FOREIGN KEY yan tümcesi için tanımlanmışsa, basamaklama işlemleri bir hata oluşturacaktır.
MySQL ON DELETE CASCADE Örneği
ON DELETE CASCADE deyimini MySQL tablosunda nasıl kullanabileceğimizi anlayalım. Öncelikle adında iki tablo oluşturacağız. Çalışan ve Ödeme . Her iki tablo da, kademeli silme işlemiyle yabancı anahtar aracılığıyla ilişkilendirilir. Burada bir Çalışan ebeveyn tablosu ve Ödeme şu şekildedir: çocuk masası . Aşağıdaki komut dosyaları her iki tabloyu da kayıtlarıyla birlikte oluşturur.
Tablo: Çalışan
Aşağıdaki ifade bir Çalışan tablosu oluşturur:
CREATE TABLE Employee ( emp_id int(10) NOT NULL, name varchar(40) NOT NULL, birthdate date NOT NULL, gender varchar(10) NOT NULL, hire_date date NOT NULL, PRIMARY KEY (emp_id) );
Daha sonra kayıtları doldurmak için ekleme sorgusunu yürütün.
INSERT INTO Employee (emp_id, name, birthdate, gender, hire_date) VALUES (101, 'Bryan', '1988-08-12', 'M', '2015-08-26'), (102, 'Joseph', '1978-05-12', 'M', '2014-10-21'), (103, 'Mike', '1984-10-13', 'M', '2017-10-28'), (104, 'Daren', '1979-04-11', 'M', '2006-11-01'), (105, 'Marie', '1990-02-11', 'F', '2018-10-12');
Aşağıda gösterilebilecek bir tablodaki verileri doğrulamak için SELECT sorgusunu yürütün:
Tablo: Ödeme
Aşağıdaki ifade bir tablo oluşturur Ödeme:
CREATE TABLE Payment ( payment_id int(10) PRIMARY KEY NOT NULL, emp_id int(10) NOT NULL, amount float NOT NULL, payment_date date NOT NULL, FOREIGN KEY (emp_id) REFERENCES Employee (emp_id) ON DELETE CASCADE );
Daha sonra, şunu yürütün: ifade ekle Kayıtları bir tabloya doldurmak için.
INSERT INTO Payment (payment_id, emp_id, amount, payment_date) VALUES (301, 101, 1200, '2015-09-15'), (302, 101, 1200, '2015-09-30'), (303, 101, 1500, '2015-10-15'), (304, 101, 1500, '2015-10-30'), (305, 102, 1800, '2015-09-15'), (306, 102, 1800, '2015-09-30');
Verileri aşağıda gösterilebilecek bir tabloda doğrulamak için SELECT sorgusunu yürütün:
Hadi silmek Çalışan ana tablosundaki veriler. Bunu yapmak için aşağıdaki ifadeyi yürütün:
mysql> DELETE FROM Employee WHERE emp_id = 102;
Yukarıdaki beyan, çalışan kayıtlarını silecektir. emp_id = 102 Ve referans verme verileri alt tabloya aktarın. Aşağıdaki çıktıyı verecek olan SELECT ifadesini kullanarak verileri doğrulayabiliriz:
Yukarıdaki çıktıda emp_id = 102'ye referans veren tüm satırların her iki tablodan da otomatik olarak silindiğini görebiliriz.
Etkilenen tablo ON DELETE CASCADE eylemiyle nasıl bulunur?
Bazen, tablodan kayıtları silmeden önce, etkilenen tabloyu ON DELETE CASCADE referans eylemiyle bilmek isteriz. Bu bilgiyi information_schema veritabanındaki reference_constraints'ten aşağıdaki gibi sorgulama yaparak bulabiliriz:
USE information_schema; SELECT table_name FROM referential_constraints WHERE constraint_schema = 'database_name' AND referenced_table_name = 'parent_table' AND delete_rule = 'CASCADE'
Aşağıdaki ifade, ON DELETE CASCADE kuralıyla Employee tablosuyla ilişkili tablolarla ilgili sonucu üretir. Çalışandb veri tabanı:
USE information_schema; SELECT table_name FROM referential_constraints WHERE constraint_schema = 'employeedb' AND referenced_table_name = 'Employee' AND delete_rule = 'CASCADE';
Yukarıdaki komutu çalıştırdıktan sonra aşağıdaki çıktıyı alacağız:
GÜNCELLEME KADEMESİNDE MySQL
ON UPDATE CASCADE yan tümcesi MySQL alışkın güncelleme üst tablodaki satırları güncellediğimizde eşleşen kayıtları alt tablodan otomatik olarak alırız. Aşağıdaki örnek bunu daha açık bir şekilde açıklamaktadır.
Öncelikle şunu kullanmamız gerekiyor: TABLOYU DEĞİŞTİR Ödeme tablosuna ON UPDATE CASCADE yan tümcesini ekleme bildirimi aşağıdaki gibidir:
ALTER TABLE Payment ADD CONSTRAINT `payment_fk` FOREIGN KEY(emp_id) REFERENCES Employee (emp_id) ON UPDATE CASCADE;
Aşağıdaki çıktıyı verecektir:
Aşağıdaki komut dosyasında, Ana Tablodaki çalışanın kimliğini güncelleyeceğiz ve bu değişiklik otomatik olarak alt tabloya da yansıtılacaktır:
aracı gimp'i iyileştir
mysql> UPDATE Employee SET emp_id = 102 WHERE emp_id = 103;
Çalışan ve Ödeme tablosunun içeriğini doğruladığımızda şunu göreceğiz: emp_id sütun değerleri başarıyla güncellenecektir.