Ho una tabella contenente un url e una stringa che rappresenta i suoi parametri. Il problema è che voglio che un url e una stringa di parametri siano il vincolo univoco per la tabella, altrimenti nessuna voce può avere la stessa stringa di parametro AND. La stringa di parametri può essere di lunghezza arbitraria (più lunga di 800bytes ovvero la lunghezza massima per una chiave MySql, quindi non posso usare Unique (url, params) poiché genera un errore ...).Come interrompere l'operazione INSERT nel trigger MySql?
Ho pensato di utilizzare i trigger per eseguire questa operazione, ma come faccio a generare un'eccezione/generare un errore se il trigger rileva che l'inserto sta per inserire una voce duplicata? Immagino che mi piacerebbe avere una MySqlException lanciata come MySql con chiavi duplicate primarie ecc. Quindi posso prenderla nel mio codice C#.
Ho due pezzi nel trigger che ho bisogno di ottenere aiuto con: ... Annullare l'eccezione a C# ... Come faccio a lanciare un'eccezione etc a C#? ... Consenti inserimento ... - Come faccio a consentire l'inserimento solo se non vi sono voci duplicate?
Heres il codice di attivazione:
CREATE TRIGGER urls_check_duplicates
BEFORE INSERT ON urls
FOR EACH ROW
BEGIN
DECLARE num_rows INTEGER;
SELECT COUNT(*)
INTO num_rows
FROM urls
WHERE url = NEW.url AND params = NEW.params;
IF num_rows > 0 THEN
... ABORT/throw exception to C# ...
ELSE
... Allow insert ...
END
da MySQL 5.5, forse anche prima, è possibile utilizzare i segnali, [vedi la mia risposta qui] [1] [1]: http://stackoverflow.com/questions/24/throw-error- in-mysql-trigger/7189396 # 7189396 – RuiDC