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

如何创建触发器以防止在MYSQL 5.0.27中插入重复的行?

慕佑运
2023-03-14
问题内容

我有一个表MyText,其中有ID列,text列和许多其他列

id-文本类型的..&其他文件
1-这是我的文字
2-xxxx

我希望text列支持Unicode的最大长度可以容纳700个Unicode字符。我无法设置,Unique (text)因为MYSQL仅对唯一列支持最大765字节的长度,而Unicode需要3个字节,因此我需要2100字节(700 * 3)唯一列。

因此,解决方案是创建一个触发器,以防止用户插入重复项。例如,如果用户在表中插入“ THIS is My Text”(我们将不区分大小写)MyText,则Mysql将完全中止包含该插入语句的所有查询,并会生成一个,SQLException以防止系统执行其他查询。

好的,假设您必须在Java代码中运行一系列sql语句

insert into MyText('THIS is My Text',1);
insert into OtherTable ('some text');
update othetTable...

然后,当系统执行时insert into MyText('THIS is My Text',1);,它应该停止在其下进行其他查询。

另外,有人建议这样做prefix index以帮助Nysqlselect
更快地执行操作,但是由于我获得了索引的ID列,因此我不确定这样做是否有必要。

注意:MYSQL 5.027是2006年的版本,相当旧,但是我喜欢

那么如何创建符合我的要求的触发器或如何解决我的问题?


问题答案:

由于性能原因,我建议不要为此使用触发器。

而是创建一个附加列来存储您的值的MD5SHA1哈希,并使用约束使该列唯一。

根据以上链接,这两个哈希函数都存在于您的MySQL版本中。另外,如果更容易将其集成到Java代码中,则可以使用MessageDigest该类在Java中进行哈希处理

如果您的插入语句由于重复而失败,则表明您的问题中指示不要执行进一步查询的部分,最好使用transaction来处理。使用纯JDBC或大多数ORM框架的Java也支持这些功能。



 类似资料:
  • 问题内容: 我正在工作,我有下表 现在我想防止插入,如果我有一个数据,尽管ID不同但存在数据 请指导我如何编写此触发器。 问题答案: 像这样的东西: 那只是为了插入,您可能也想考虑更新。 更新 一种更简单的方法是在表上创建唯一约束,这也将强制它进行更新并消除对触发器的需求。做就是了: 然后你就可以做生意。

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

  • 问题内容: 如何防止在php mysql中输入重复记录?在插入表之前验证输入。 我目前正在为我的网站建立一个用户注册部分,但是如果在数据库中发现重复的用户名或电子邮件地址,我想向他们显示一个错误。 编辑 这是我到目前为止要插入的行…我将如何在这里实现这两个答案: 我猜我可以在if … else语句中实现所有功能吗? 问题答案: 我使用了sql语句以及if else语句。 然后 显示错误消息,以防止

  • 问题内容: 我有一个分区表,该表具有(我认为)适当的触发器和一些约束。不知何故,语句为每行插入2行:一行用于父行,另一行用于适当的分区。 简要的设置如下: 经过进一步的调试,我隔离了导致它的原因:触发器返回了事实,而不是just 。但是,我确实希望我的insert语句返回自动增量,并且如果我只是返回,则不是这种情况。 有什么解决方案?为什么返回会导致这种看似“奇怪”​​的行为? 更新#1 好吧,我

  • 问题内容: 我有两个桌子和。我需要一些行插入从,它被插入之后。我知道这个问题,但我无法解决。请帮忙。 我为触发器编写了以下代码: 现在,当我插入行时,将添加到,但不添加到。它引发以下错误: _消息515,级别16,状态2,过程trigger_UpdateItemDetails,行11 无法将值NULL插入表’dbStockHandling.dbo.tbl_ItemDetails’的列’Purcha

  • 问题内容: 我有一系列需要写入SQL的数据,我应该怎么做才能检查SQL中的数据以防止将相同的数据插入表中? 要插入的示例数据: 如果第四数据再次出现,我希望系统跳过重复的记录(约翰)。 到目前为止,我有: 我得到了最后插入的字符串值checkname,应该怎么检查数据? 问题答案: 首先,可以通过使用唯一索引或约束来防止表中出现重复项。索引/约束可以工作 在演唱会 与下面的建议。如果 仅 使用唯一