Il fatto è che se venisse fatta una insert su qulla tabella nessuno controllerà la correttezza dei dati... Però vabbè, se questa è l'unica soluzione adotterò questa anche se l'integrità dei dati non è garantita al 100%...
- Home
- ladydisaster
- Post
ladydisaster
@ladydisaster
Post creati da ladydisaster
-
RE: trigger mysql
-
RE: trigger mysql
E quindi se ho capito bene, quando dovrei fare un inserimento chiamerei direttamente la procedura invece che effettuare l'INSERT direttamente?
E' una soluzione, però questo non mi garantirebbe l'integrità del mio db... E da quel punto di vista sarebbe la stessa cosa che occuparsene da PHP.Oppure intendi dire che devo chiamare la procedura nel trigger azionato BEFORE INSERT (visto che si può fare ) e che questo ovvierebbe il problema? (Anche se non capisco perchè )
Grazie cmq per le tue risposte...
-
RE: trigger mysql
Cioè tu mi consigli di fare un procedura che che si occupi di cancellare i dati nella mia tabella e di chiamarla nel mio trigger?
Non capisco cosa cambia... C'è solo un passaggio in più ma il problema di fondo è lo stesso, vado sempre ad effettuare operazioni sulla stessa tabella che invoca il trigger... Non credi? -
RE: trigger mysql
Purtroppo la mia soluzione non risolve tutti i casi
Adesso ho bisogno di un trigger che mi cancelli alcune righe da una tabella dal momento che inserisco un certo valore
del tipo:
CREATE TRIGGER myTrigger
AFTER INSERT ON T1
FOREACH ROW
IF NEW.b = 1;
DELETE FROM T1
WHERE a= NEW.a
and b = 0;Ma dal momento in cui provo a fare un inserimento in quella tabella MySQL tira fuori lo stesso erroraccio... Non c'è proprio alcun modo per fare un controllo del genere da MySQL? Devo operare per forza da PHP? Grazie per il vostro aiuto!
-
RE: trigger mysql
Volevo mettere dei controlli interni al db... Cmq ho risolto come fare
creo un trigger che quando un dato viola un vincolo, imposto un altro dato di default non null a NULL in modo tale che mysql tira fuori un'eccezione e non fa l'inserimento!
delimiter //
CREATE TRIGGER TR_chk_statoPartita_INSERT
BEFORE INSERT ON Partita
FOR EACH ROW
IF NEW.stato>2
OR NEW.stato < 0
THEN set NEW.stato = NULL;
END IF ; //dove "stato" è NON NULL
Grazie cmq per la tua risposta
-
trigger mysql
Mi fate un esempio di un trigger che impedisca l'insermento di una riga che non rispetta certi vincoli?
Il mio scopo è sostituire un check perchè in MySQL non vengono accettati
il mio check sarebbe del tipo
CONSTRAINT chk_stato CHECK (STATO IN (1, 2, 3));
se aggiungo un trigger del tipo:
CREATE TRIGGER TR_chk_statoPartita
AFTER INSERT
ON Partita
FOR EACH ROW
DELETE FROM partita
where stato <= 0 AND stato >= 2;me lo accetta ma non mi fa inserire nulla nella tabella Partita e quando provo ad inserire qualcosa mi dice:
ERROR 1442 (HY000): Can't update table 'partita' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
Dove sbaglio???
-
rendere chiave primaria una chiave esterna
ciao a tutti,
mi sapete dire quale è il codice SQL per rendere una chiave esterna anche chiave primaria?Vi faccio un esempio io ho due entità ed un'associazione del tipo
E1: PERSONA con chiave primaria codiceFiscale
A: puòEssere
E2: FEMMINA con chiave esterna PERSONA.codiceFiscale
(ora indipendentemente dal fatto che possa essere più o meno giusto a volte è necessario fare una cosa del genere) questo tipo di modello E/R si traduce in 2 tabelle: PERSONA e FEMMINA.
In questo caso la chiave esterna PERSONA.codiceFiscale della tabella FEMMINA può essere anche chiave primaria perchè il codice fiscale è univoco per ogni persona, però ogni occorrenza della tabella FEMMINA deve corrispondere a un'occorrenza della tabella PERSONA.
Come faccio a combinare le due cose?
Se rendo chiave esterna PERSONA.codiceFiscale mi permette di inserire più entry con lo stesso codice fiscale nella tabella FEMMINA, se invece la metto come chiave primaria posso inserire una entry in FEMMINA anche se non ce n'è una corrispondente in PERSONA, se aggiungo il vincolo uinque key perde la proprietà di chiave esterna... Come faccio?
E un'altra cosa: come rendo chiave primaria la combinazione di due campi? Cioè quando due campi insieme mi creano una chiave primaria. Quale è il codice?
Io sto utilizzando MySQL