创建MySQL索引以防止doublepost?

创建MySQL索引以防止doublepost?,mysql,Mysql,我有一个表comments,其中有(简化的)行id,文章id,用户id和文本 现在我有了一个主意。我是否可以在文章id、用户id和文本上创建一个唯一的索引,以防止直接从数据库设计中重复发布 既然text来自类型text,并且拒绝编制索引,我该怎么做?您的意思是防止意外双击“保存”按钮?或者阻止发布相同的文本,比如一周后?如果是第一个,可能只是在第一次单击时禁用按钮。如果是第二种情况,您可能应该在文本字段上运行一个哈希函数,以查看该文章中该用户是否已经存在匹配项。或者添加一个额外的字段,它是文本字

我有一个表
comments
,其中有(简化的)行
id
文章id
用户id
文本

现在我有了一个主意。我是否可以在
文章id
用户id
文本
上创建一个唯一的索引,以防止直接从数据库设计中重复发布


既然
text
来自类型
text
,并且拒绝编制索引,我该怎么做?

您的意思是防止意外双击“保存”按钮?或者阻止发布相同的文本,比如一周后?如果是第一个,可能只是在第一次单击时禁用按钮。如果是第二种情况,您可能应该在文本字段上运行一个哈希函数,以查看该文章中该用户是否已经存在匹配项。或者添加一个额外的字段,它是文本字段的哈希函数,并使用它创建唯一的复合键。如

要在
文本
字段上创建
索引
,您需要指定索引长度,如错误所暗示的那样。这只会是你的文本字段的索引部分,所以你可能想考虑使用不同的字段作为索引的一部分,比如“<代码>日期>代码>字段-文章名称在那时是独一无二的,或者类似的东西。

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.
Index key prefixes can be up to 767 bytes. See [Section 12.1.8, “CREATE INDEX Syntax”][1].
用于InnODB表

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.
Index key prefixes can be up to 767 bytes. See [Section 12.1.8, “CREATE INDEX Syntax”][1].
见:


另请参见:

您可以删除自动递增的
id
字段(我假设它是AI),并将
文章id
用户id
文本
设置为复合主键
我得到
#1170-在密钥规范中使用的BLOB/TEXT列“TEXT”没有密钥长度
如果Brian或我回答了您的问题,请将问题标记为已回答。如果没有,您还有什么问题?这主要是为了防止重复发布。特别是当你发布一些东西,然后使用浏览器的“返回”功能时,它会再次发送发布数据。除了数据库设计之外,还有什么办法可以防止这种情况发生吗?你最好是通过数据库设计来防止这种情况发生。将永远防止重复发布,而不仅仅是因为“备份”。