开发者社区> 问答> 正文

如何中止MySql触发器中的INSERT操作?

我有一个包含URL和代表其参数的字符串的表。问题是我希望url和parameterstring是表的唯一约束-aka没有条目可以具有相同的url AND parameter string。参数字符串可以是任意长度(长于800bytes左右,这是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

展开
收起
保持可爱mmm 2020-05-10 20:55:34 668 0
1 条回答
写回答
取消 提交回答
  • mysql文档中有关触发器的注释表明mysql中没有此类功能。您可以做的最好的事情就是为触发错误创建一个单独的表,如同一页上的建议。来源:stack overflow

    2020-05-10 20:55:47
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
PolarDB MySQL引擎重磅功能及产品能力盛大发布 立即下载
阿里云企业级自治数据库 RDS 详解 立即下载
阿里云MySQL云数据库产品体系介绍 立即下载

相关镜像