什么';在MySQL(InnoDB)中使用UNIQUE的目的是什么

什么';在MySQL(InnoDB)中使用UNIQUE的目的是什么,mysql,unique,Mysql,Unique,对我来说,UNIQUE关键字是为了更好地构造表(将主键放在一边,用于识别目的)。例如,文件。如果不想将同一文件添加到数据库中,可以将其SHA-2哈希键用作唯一键。但是SHA-2是512个字符,InnoDB限制为255个字符。为什么MySQL会有这样的限制,以及如何在MySQL unique中使用更大、更可靠、唯一的键(如SHA-2)进行索引。最好不要将其用于检查文本字段的唯一性 我总是检查应用程序中的数据完整性和唯一性,而不是MySQL。MySQL中的唯一性用于索引。最好不要将其用于检查文本字段

对我来说,
UNIQUE
关键字是为了更好地构造表(将
主键
放在一边,用于识别目的)。例如,文件。如果不想将同一文件添加到数据库中,可以将其SHA-2哈希键用作
唯一键。但是SHA-2是512个字符,InnoDB限制为255个字符。为什么MySQL会有这样的限制,以及如何在MySQL unique中使用更大、更可靠、唯一的键(如SHA-2)进行索引。最好不要将其用于检查文本字段的唯一性


我总是检查应用程序中的数据完整性和唯一性,而不是MySQL。

MySQL中的唯一性用于索引。最好不要将其用于检查文本字段的唯一性


我总是在应用程序中检查数据的完整性和唯一性,而不是MySQL。

SHA2-512给出512位,即64字节。或十六进制字符(128)

MySQL 5.5中,MyISAM的唯一索引键长度为1000字节,InnoDB的唯一索引键长度为767字节

当您选择使用自动递增代理主键时,“唯一”用于强制自然唯一性。或者在需要时使用超级键唯一性。等等

编辑:


要对LOB值强制唯一性,只需将其散列并添加一个约束。如果有足够的行具有可测量的冲突风险,那么为什么数据库中有这么多LOB值?

SHA2-512给出512位,即64字节。或十六进制字符(128)

MySQL 5.5中,MyISAM的唯一索引键长度为1000字节,InnoDB的唯一索引键长度为767字节

当您选择使用自动递增代理主键时,“唯一”用于强制自然唯一性。或者在需要时使用超级键唯一性。等等

编辑:


要对LOB值强制唯一性,只需将其散列并添加一个约束。如果您有足够多的行来具有可测量的冲突风险,那么为什么数据库中有这么多LOB值呢?

我想这是个糟糕的例子,但是
varchar(99999)
@abhinav:我刚才通过了prefixes@puk:然后你可以使用varchar(65535)。我也质疑你的设计。是的,但我认为InnoDB的
唯一性的限制是255个例子,我想,但是
varchar(99999)
@abhinav呢prefixes@puk:然后你可以使用varchar(65535)。还有对你的设计提出质疑。是的,但我认为InnoDB的
UNIQUE
限制是255你有一个损坏的数据库。如果不是现在,在某个时候-1考虑到您可以检查应用程序中的唯一性,比如说,1亿行比DB更好engine@gbn我现在很困惑。您是说应该使用
UNIQUE
来构造表吗?如果我希望我的users表强制每个人都有一个唯一的ID(自动)、电子邮件、用户名和昵称,最大长度都大于255,该怎么办。我应该按照OP的建议签入应用程序,还是让MySQL来处理。两者都是:MySQL在应用程序生成的哈希上强制执行unique。在其他RDBMS中,您可以使用计算列,但MySQL不支持them@gbn“MySQL在应用程序生成的哈希上强制执行unique”->您能…简化吗?你的php在电子邮件、用户名和昵称上生成了一个散列。哈希的唯一性由mysql中哈希列的唯一索引强制实现。您的数据库已损坏。如果不是现在,在某个时候-1考虑到您可以检查应用程序中的唯一性,比如说,1亿行比DB更好engine@gbn我现在很困惑。您是说应该使用
UNIQUE
来构造表吗?如果我希望我的users表强制每个人都有一个唯一的ID(自动)、电子邮件、用户名和昵称,最大长度都大于255,该怎么办。我应该按照OP的建议签入应用程序,还是让MySQL来处理。两者都是:MySQL在应用程序生成的哈希上强制执行unique。在其他RDBMS中,您可以使用计算列,但MySQL不支持them@gbn“MySQL在应用程序生成的哈希上强制执行unique”->您能…简化吗?你的php在电子邮件、用户名和昵称上生成了一个散列。散列的唯一性由mysql中散列上的唯一索引强制实现。