mysql - 在 MySQL 中强制执行唯一行

标签 mysql indexing mysql-error-1071

我在 MySQL 中有一个表,它有 3 个字段,我想在其中两个字段之间强制执行唯一性。这是表 DDL:

CREATE TABLE `CLIENT_NAMES` (
`ID` int(11) NOT NULL auto_increment,
`CLIENT_NAME` varchar(500) NOT NULL,
`OWNER_ID` int(11) NOT NULL,
PRIMARY KEY  (`ID`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

ID 字段是代理键(该表正在使用 ETL 加载)。 CLIENT_NAME 是一个包含客户名称的字段 OWNER_ID 是一个表示客户所有者的 id。

我想我可以通过 CLIENT_NAMEOWNER_ID 上的唯一索引来强制执行此操作,

ALTER TABLE `DW`.`CLIENT_NAMES` 
ADD UNIQUE INDEX enforce_unique_idx(`CLIENT_NAME`, `OWNER_ID`);

但是 MySQL 给我一个错误:

Error executing SQL commands to update table. Specified key was too long; max key length is 765 bytes (error 1071)

还有其他人有什么想法吗?

最佳答案

MySQL 无法对超过 765 字节的键强制唯一性(显然 500 个 UTF8 字符可以超过此限制)。

  1. CLIENT_NAME 真的需要 500 个字符吗?似乎有点过分。
  2. 添加一个新的(较短的)列,即 hash(CLIENT_NAME)。让 MySQL 改为对该散列强制执行唯一性。

关于mysql - 在 MySQL 中强制执行唯一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/90092/

相关文章:

MySQL 检索 SELECT 检索的 INSERT 参数

ArrayList 中的 Java 对象方法

MySQL 错误 #1071 - 指定的 key 太长;最大 key 长度为 767 字节

简单转储导入设置中的 mysql 错误 1071(指定的 key 太长;最大 key 长度为 1000 字节)

MySQL 错误 #1071 - 指定的 key 太长;最大 key 长度为 767 字节

php - fatal error : Uncaught exception 'Zend_Db_Table_Exception'

mysql - 限制对 MySQL 中行子集的访问

mysql为同一个schema类型多张表创建一个表名

entity-framework - 无法生成显式迁移 (EF5)(迁移待定)

mysql - MySql 中的索引类型?