我有一個表包含一個url和一個字符串表示其參數。問題是我想要一個url和一個參數字符串作爲表的唯一約束 - 又沒有條目可以有相同的URL和參數字符串。參數字符串可以是任意長度(長度大於800bytes,這是MySql鍵的最大長度,所以我不能使用Unique(url,params),因爲它會引發錯誤...)。如何在MySql觸發器中取消INSERT操作?
我想過使用觸發器來做到這一點,但是如果觸發器發現插入件即將插入重複條目,我該如何拋出異常/產生錯誤?我想我希望MySqlException拋出像MySql一樣的重複主鍵等,所以我可以在我的C#代碼中捕獲它。
我在觸發器中有兩個部分我需要幫助: ...中止拋出異常到C#...我如何拋出異常等C#? ...允許插入... - 如何在沒有重複條目的情況下允許插入?
繼承人的觸發代碼:
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
從MySQL 5.5,可能更早,可以使用的信號,[在這裏看到我的答案] [1] [1]:http://stackoverflow.com/questions/24/throw-error- in-mysql-trigger/7189396#7189396 – RuiDC 2011-08-25 11:20:16