Tengo una tabla que contiene una url y una cadena que representan sus parámetros. El problema es que quiero una URL y una cadena de parámetros para ser la restricción única para la tabla, es decir, ninguna entrada puede tener la misma URL Y cadena de parámetros. La cadena de parámetros puede ser de longitud arbitraria (más de 800 bytes o más, que es la longitud máxima para una clave MySql, por lo que no puedo usar Unique (url, params) ya que arroja un error ...).Cómo cancelar la operación INSERT en el desencadenador MySql?
pensé acerca del uso de los disparadores para hacer esto, pero ¿cómo puedo lanzar una excepción/generará un error si el disparador descubre el inserto está a punto de insertar una entrada duplicada? Me imagino que me gustaría tener una MySqlException arrojada como lo hace MySql con claves duplicadas, etc. para poder verla en mi código C#.
Tengo dos piezas en el gatillo Necesito ayuda con: ... Disminuir la excepción de lanzamiento a C# ... ¿Cómo puedo lanzar una excepción, etc. a C#? ... Permitir inserción ... - ¿cómo puedo permitir la inserción si no hay una entrada duplicada?
Aquí está el código de activación:
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
de MySQL 5.5, posiblemente anterior, puede utilizar las señales, [véase mi respuesta aquí] [1] [1]: http://stackoverflow.com/questions/24/throw-error- in-mysql-trigger/7189396 # 7189396 – RuiDC