这个问题跟进了以前的问题。 is it possible to make a field in Mysql table to to have length max=700, to be unicode (3 bytes) and to be unique?
我的表MyText
有ID
列,text
列&许多其他专栏
Id - text - type ..& other fileds 1 - this is my text 2 - xxxx
我希望text
列支持unicode,最大长度可以容纳700个Unicode字符。我无法设置Unique (text)
,因为MYSQL仅支持765字节的最大长度用于唯一列,而Unicode则需要3个字节,所以我需要2100字节(700 * 3)的唯一列。
因此,解决方案是创建一个阻止用户插入副本的触发器。例如,如果用户插入" THIS is My Text
" (我们不关心区分大小写)到MyText
表中,然后Mysql将完全中止包含该Inserting语句的所有查询,并生成SQLException
以阻止系统执行其他查询。 / p>
好的,假设您必须在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
帮助Nysql更快地执行select
,但我不确定它是否太必要,因为我得到了索引的ID列。
注意:MYSQL 5.027是2006年的版本,它很老了,但我喜欢它
那么如何创建符合我要求的触发器或如何解决我的问题呢?
答案 0 :(得分:4)
由于性能原因,我建议不要使用触发器。
而是创建一个额外的列来存储值的MD5
或SHA1
哈希,并使用约束使该列唯一。
根据上述链接,您的MySQL版本中都存在散列函数。或者,如果将它集成到Java代码中更容易,则可以使用MessageDigest
类在Java中进行散列。
如果insert语句由于重复而失败,那么您在问题中指出不应执行进一步查询的部分最好使用transactions来处理。 Java中也支持使用普通JDBC或大多数ORM框架。