我有一个表MyText,其中有ID列,text列和许多其他列
MyText
ID
text
id-文本类型的..&其他文件 1-这是我的文字 2-xxxx
我希望text列支持Unicode的最大长度可以容纳700个Unicode字符。我无法设置,Unique (text)因为MYSQL仅对唯一列支持最大765字节的长度,而Unicode需要3个字节,因此我需要2100字节(700 * 3)唯一列。
Unique (text)
因此,解决方案是创建一个触发器,以防止用户插入重复项。例如,如果用户在表中插入“ THIS is My Text”(我们将不区分大小写)MyText,则Mysql将完全中止包含该插入语句的所有查询,并会生成一个,SQLException以防止系统执行其他查询。
THIS is My Text
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);,它应该停止在其下进行其他查询。
insert into MyText('THIS is My Text',1);
另外,有人建议这样做prefix index以帮助Nysqlselect 更快地执行操作,但是由于我获得了索引的ID列,因此我不确定这样做是否有必要。
prefix index
select
注意:MYSQL 5.027是2006年的版本,相当旧,但是我喜欢
那么如何创建符合我的要求的触发器或如何解决我的问题?
由于性能原因,我建议不要为此使用触发器。
而是创建一个附加列来存储您的值的MD5或SHA1哈希,并使用约束使该列唯一。
MD5
SHA1
根据以上链接,这两个哈希函数都存在于您的MySQL版本中。另外,如果更容易将其集成到Java代码中,则可以使用MessageDigest该类在Java中进行哈希处理 。
MessageDigest
如果您的插入语句由于重复而失败,则表明您的问题中指示不要执行进一步查询的部分,最好使用transaction来处理。使用纯JDBC或大多数ORM框架的Java也支持这些功能。