logo

MySQL POISTA CASCADE

ON DELETE CASCADE -lausetta MySQL:ssä käytetään automaattisesti Poista vastaavat tietueet alitaulukosta, kun poistamme rivit ylätason taulukosta. Se on eräänlainen viittaustoiminto, joka liittyy vieras avain .

Oletetaan, että olemme luoneet kaksi taulukkoa, joissa on FORIGN KEY vierasavainsuhteessa, jolloin molemmista taulukoista on pää- ja lapsi. Seuraavaksi määritämme ON DELETE CASCADE -lauseen yhdelle FORIGN KEY:lle, joka on asetettava toiselle, jotta se onnistuu peräkkäisissä toiminnoissa. Jos ON DELETE CASCADE on määritetty vain yhdelle FOREIGN KEY -lauseelle, peräkkäiset toiminnot aiheuttavat virheen.

MySQL ON DELETE CASCADE Esimerkki

Ymmärrämme, kuinka voimme käyttää ON DELETE CASCADE -lausetta MySQL-taulukossa. Ensin aiomme luoda kaksi taulukkoa nimeltä Työntekijä ja maksu . Molemmat taulukot liittyvät viiteavaimen kautta poistokaskaditoiminnolla. Tässä työntekijä on vanhempien taulukko , ja Maksu on lasten pöytä . Seuraavat komentosarjat luovat molemmat taulukot tietueineen.

Taulukko: Työntekijä

Seuraava lause luo taulukon Työntekijä:

muokkausnäppäimet
 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) ); 

Suorita seuraavaksi lisäyskysely täyttääksesi tietueet.

 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'); 

Suorita SELECT-kysely vahvistaaksesi tiedot taulukkoon, joka voidaan näyttää alla:

MySQL DELETE CASCADE

Taulukko: Maksu

Alla oleva lausunto luo taulukon Maksu:

 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 ); 

Suorita seuraavaksi lisää lausunto täyttää tietueet taulukkoon.

 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'); 

Suorita SELECT-kysely vahvistaaksesi tiedot taulukkoon, joka voidaan näyttää alla:

MySQL DELETE CASCADE

Anna meidän poistaa tiedot ylätason taulukosta Työntekijä. Voit tehdä tämän suorittamalla seuraavan lauseen:

 mysql> DELETE FROM Employee WHERE emp_id = 102; 

Yllä oleva lausunto poistaa työntekijätiedot, joiden emp_id = 102 ja viittaamalla tiedot lapsitaulukkoon. Voimme tarkistaa tiedot käyttämällä SELECT-lausetta, joka antaa seuraavan tulosteen:

MySQL DELETE CASCADE

Yllä olevassa tulosteessa voimme nähdä, että kaikki rivit, jotka viittaavat arvoon emp_id = 102, poistettiin automaattisesti molemmista taulukoista.

Miten löydän POISTA CASCADE -toiminnon vaikutuksen alaisen taulukon?

Joskus ennen tietueiden poistamista taulukosta haluamme tietää ON DELETE CASCADE -viittaustoiminnon taulukon, jota tämä koskee. Löydämme nämä tiedot tekemällä kyselyn information_schema-tietokannan referential_constraints-kohdasta seuraavasti:

 USE information_schema; SELECT table_name FROM referential_constraints WHERE constraint_schema = 'database_name' AND referenced_table_name = 'parent_table' AND delete_rule = 'CASCADE' 

Alla oleva lauseke tuottaa tuloksen taulukoista, jotka liittyvät Työntekijä-taulukkoon ON DELETE CASCADE -säännöllä työntekijädb tietokanta:

 USE information_schema; SELECT table_name FROM referential_constraints WHERE constraint_schema = 'employeedb' AND referenced_table_name = 'Employee' AND delete_rule = 'CASCADE'; 

Yllä olevan komennon suorittamisen jälkeen saamme alla olevan tulosteen:

MySQL DELETE CASCADE

MySQL PÄIVITYSKASKADILLA

ON UPDATE CASCADE -lause MySQL on tapana päivittää vastaavat tietueet alitaulukosta automaattisesti, kun päivitämme ylätason taulukon rivit. Seuraava esimerkki selittää sen selkeämmin.

Ensinnäkin meidän on käytettävä MUUTTA TAULU lausunto ON UPDATE CASCADE -lausekkeen lisäämiseksi taulukkoon Maksu seuraavasti:

lateksiluettelot
 ALTER TABLE Payment ADD CONSTRAINT `payment_fk` FOREIGN KEY(emp_id) REFERENCES Employee (emp_id) ON UPDATE CASCADE; 

Se antaa seuraavan tulosteen:

MySQL DELETE CASCADE

Alla olevassa skriptissä päivitämme työntekijän tunnuksen ylätason taulukossa, ja se heijastaa tätä muutosta automaattisesti myös alitaulukossa:

 mysql> UPDATE Employee SET emp_id = 102 WHERE emp_id = 103; 

Tarkistamalla Työntekijä- ja maksutaulukon sisällön näemme sen emp_id sarakearvot päivitetään onnistuneesti.

MySQL DELETE CASCADE