我有一个包含(简化的comments
)行id
、、article_id
和。user_id
text
现在我有了一个想法。我可以通过某种方式创建一个唯一索引article_id
,user_id
并text
防止直接从数据库设计中重复发布吗?
我该怎么做,因为text
它来自类型TEXT
并且拒绝被索引?
我有一个包含(简化的comments
)行id
、、article_id
和。user_id
text
现在我有了一个想法。我可以通过某种方式创建一个唯一索引article_id
,user_id
并text
防止直接从数据库设计中重复发布吗?
我该怎么做,因为text
它来自类型TEXT
并且拒绝被索引?
你的意思是防止意外双击“保存”按钮?或者防止在一周后发布相同的确切文本?如果是第一个,可能只是在第一次单击时禁用您的按钮。如果是第二个,您可能应该在您的文本字段上运行一个哈希函数,以查看该用户在该文章中是否已经存在匹配项。或者添加一个额外的字段,它是您的文本字段的哈希函数,并使用它创建您唯一的复合键。喜欢这里
要INDEX
在TEXT
字段上创建一个,您需要指定索引长度,就像错误提示一样。这只会索引您的文本字段的一部分,因此您可能需要考虑使用不同的字段作为索引的一部分,例如DATE
字段 - 文章名称在当天是唯一的,或者类似的东西。
INDEX UniqueArticle (article_id, user_id, text(100));
对于 MyISAM 表
The maximum key length is 1000 bytes. This can also be changed by changing the source and recompiling. For the case of a key longer than 250 bytes, a larger key block size than the default of 1024 bytes is used.
对于 InnODB 表
Index key prefixes can be up to 767 bytes. See [Section 12.1.8, “CREATE INDEX Syntax”][1].