我有一个表,其中包含一个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