为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

郎朗坤 2019-07-15 19:43:35
如何中止MySQL触发器中的INSERT操作?我有一个表,其中包含一个url和一个表示其参数的字符串。问题是,我想要一个url和一个参数字符串作为表的唯一约束-也就是没有任何条目可以具有相同的url和参数字符串。参数字符串可以是任意长度(大于800字节左右,这是MySQL键的最大长度,因此我不能使用唯一的(url,params),因为它会抛出一个错误.)。我曾考虑过使用触发器来执行此操作,但是如果触发器发现INSERT即将插入重复的条目,如何抛出异常/引发错误?我想我希望像MySQL一样抛出一个MySqlException,使用重复的主键等等,这样我就可以在C#代码中捕获它。我有两块扳机,我需要得到帮助:.中止抛出异常到C#.。如何将异常等抛给C#?允许插入.-如果没有重复条目,我如何允许插入?下面是触发代码:CREATE TRIGGER urls_check_duplicates BEFORE INSERT ON urlsFOR EACH ROWBEGINDECLARE num_rows INTEGER;SELECT COUNT(*)INTO num_rowsFROM urlsWHERE  url = NEW.url AND params = NEW.params;IF num_rows > 0 THEN    ... ABORT/throw exception to C# ...ELSE    ... Allow insert ...END
查看完整描述

3 回答

?
守着星空守着你

TA贡献1799条经验 获得超8个赞

这个MySQL文档中有关触发器的注释建议MySQL中没有这样的特性。最好的方法就是为触发错误创建一个单独的表,就像在同一页上建议的那样.


查看完整回答
反对 回复 2019-07-15
?
翻阅古今

TA贡献1780条经验 获得超5个赞

如果表定义为NOTNULL值,则可以将NEW设置为NULL,这实际上不会执行INSERT。您可能必须打开严格的SQL模式才能正常工作。


查看完整回答
反对 回复 2019-07-15
  • 3 回答
  • 0 关注
  • 1702 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信