【发布时间】:2010-03-29 14:45:29
【问题描述】:
我有一个表,其中包含一个 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
【问题讨论】:
-
从 MySQL 5.5 开始,可能更早,您可以使用信号,[在这里查看我的答案][1] [1]:stackoverflow.com/questions/24/throw-error-in-mysql-trigger/…
标签: mysql triggers duplicates