当前位置: 首页 > 面试题库 >

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

濮阳景天
2023-03-14
问题内容

我有一个包含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

问题答案:

mysql文档中有关触发器的注释表明mysql中没有此类功能。您可以做的最好的事情就是为触发错误创建一个单独的表,如同一页上的建议。



 类似资料:
  • 本文向大家介绍MySQL触发器 Update触发Insert失败,包括了MySQL触发器 Update触发Insert失败的使用技巧和注意事项,需要的朋友参考一下 今天工作需要,想要实现将仅对状态更新的表进行历史记录显示,于是考虑在原表中建立触发器,将更新的内容同时写入另一张表 于是进行测试 执行触发器语句,报错,报错内容如下: 分析,由于访问工具HediSQL,导致无法正常创建触发器,相同语句,

  • 问题内容: 我想创建一个触发器,以防止在出生日期(列之一)将来的时候插入。我有这个: 如何取消if语句中的插入? 问题答案: 基于这一点,我不确定是否可以这样做。 MySQL当前的触发器实现中不支持自愿引发异常并中止生成触发器的语句。 我发现的解决方法是编写一个BEFORE触发器,以将表中的not-NULL列之一设置为NULL,从而违反了其NOT NULL约束。这导致产生触发器的语句被中止。

  • 我写了这个触发器,但它不工作,我执行了这个错误: 11:24:11创建触发器check_venduti在INSERT ON venduti之后,对每一行开始SELECT count(*)作为num_rows FROM prodotto(其中COD_PRODOTTO=New.COD_PRODOTO如果numrows<0,则发出“Error”信号,结束错误代码:1064)。您的SQL语法有错误;检查与

  • 问题内容: 使用sql Server2005。我声明了一个触发条件,该触发条件被触发为“ AFTER INSERT,UPDATE”,在此触发条件下,我使用WHILE和CURSOR在INSERTED表的行上循环。当我找到不满足特定条件的行时: 我希望触发器引发错误,并且不要插入任何触发触发器的行(甚至不包括那些已经满足我条件的行)。<-–我不知道该怎么做! 您能告诉我如何增加错误并防止插入吗? 问题

  • 问题内容: 我有桌子 我想在INSERT上创建一个触发器,该触发器将更改inserting的值,例如: 将导致 在上面的示例中,我得到了插入的值,将其更改为大写并添加到末尾。 这就是我所需要的,获取要插入的内容并对其进行修改。 我怎样才能做到这一点? 插入更新后处理它是否更好?还是使用INSTEAD OF INSERT进行触发,并在表结构每次更改时对其进行修改? 问题答案: 使用插入后触发器。从伪

  • 我正在尝试制作一个触发器,该触发器检测您何时在表RECHOND的FLIGHTTICKEID列中插入一个重复的值,然后在另一个表中插入一些数据。 这看起来是可以的,但是当我尝试将值插入到表中以查看触发器是否工作时,使用下面的insert into时,我得到了他的错误:错误代码:1241。操作数应包含1列。 如果我移除触发器,Insert工作正常,所以我想我在触发器上做错了什么。有人知道会是什么吗?谢