Ho tabella "A" in MySQL. Ha alcuni riferimenti con l'eliminazione a cascata di alcune altre tabelle ("B", "C", "D" ...). Devo usare un trigger quando qualcosa cancella da "A". Questo trigger funziona quando elimino i record direttamente da "A". Ma non funziona con l'eliminazione a cascata. Esiste qualche versione di MySQL dove il mio trigger funzionerà con l'eliminazione a cascata? O, forse, c'è un altro modo per chiamareTrigger chiama in cascata cancellando
risposta
Da http://dev.mysql.com/doc/refman/5.6/en/innodb-restrictions.html
in cascata azioni chiave stranieri non attivano i trigger
In altre parole, non è possibile utilizzare il grilletto con eliminazione in cascata.
odio mysql di più ogni giorno –
Sì, non hanno fatto nulla per sistemarlo negli ultimi 5 (?) Anni. – boreq
Ho appena trovato questo problema ed è estremamente stupido :-( –
di riassumere le risposte da @Niel de Wet e @Browny Lin:
- eliminazioni Purtroppo in cascata non attivano i trigger in MySQL.
- Una soluzione consiste nel non utilizzare eliminazioni a cascata, ma implementare l'eliminazione automatica tramite un altro trigger.
utilizzando un altro trigger per l'eliminazione non è un approccio corretto. Perché se ho un trigger su tableA e cancella una riga in tableB, e anche If I have a trigger aon tableB per l'aggiornamento tableA, quindi una collisione – Shafizadeh
CREATE TABLE doc (
docID INTEGER NOT NULL AUTO_INCREMENT,
langCode CHAR(2) NOT NULL,
title VARCHAR(32),
PRIMARY KEY (docID, langCode)
) Type=InnoDB;
CREATE TABLE author (
authorID INTEGER NOT NULL AUTO_INCREMENT,
docID CHAR(2) NOT NULL,
name VARCHAR(32),
PRIMARY KEY (authorID),
FOREIGN KEY (docID) REFERENCES doc(docID) ON DELETE CASCADE ON UPDATE CASCADE
) Type=InnoDB;
Questa è una copia diretta di un commento da http://dev.mysql.com/doc/refman/5.7/en/innodb-foreign-key-constraints.html. – hichris123
Questo non sembra tentare di rispondere esimo e domanda a tutti. – Pang
Permettetemi di condividere quanto ho "fissare" il problema dal primo giorno ho scoperto che esisteva. Copio il trigger dalla tabella in cascata nella prima tabella che viene cancellata direttamente. Funziona e basta.
Un sacco di volte si tratta di una copia/incolla, e occasionalmente richiede un'estesa riscrittura del codice.
La parte migliore è che, quando Oracle risolve questo errore , è stato rimosso solo il codice di attivazione dalla tabella. Ecco!
Questo è un argomento per eseguire la logica nel codice dell'applicazione, non una configurazione complessa di Trigger e Cascading. –