我有一个表格包含一个URL和一个表示其参数的字符串。问题是,我希望URL和参数字符串成为该表格的唯一约束条件-也就是说,没有任何条目可以具有相同的URL和参数字符串。参数字符串的长度可以任意(比如长于800字节,这是MySql关键字的最大长度,因此我不能使用Unique(url,params),因为它会抛出错误...)。
我考虑使用触发器来解决这个问题,但如果触发器发现插入操作将要插入重复条目,我该如何抛出异常/引发错误呢?我想象中会像MySql那样抛出MySqlException,就像重复的主键等一样,这样我就可以在我的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