小编典典

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

sql

我有一个表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年的版本,相当旧,但是我喜欢

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


阅读 252

收藏
2021-04-28

共1个答案

小编典典

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

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

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

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

2021-04-28