猿问

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

如何中止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


郎朗坤
浏览 1703回答 3
3回答

守着星空守着你

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

翻阅古今

如果表定义为NOTNULL值,则可以将NEW设置为NULL,这实际上不会执行INSERT。您可能必须打开严格的SQL模式才能正常工作。
随时随地看视频慕课网APP
我要回答