协慌网

登录 贡献 社区

如何为 MySQL 中的多列指定唯一约束?

我有一张桌子:

table votes (
    id,
    user,
    email,
    address,
    primary key(id),
);

现在我想使列用户,电子邮件,地址唯一(一起)。

我如何在 MySql 中执行此操作?

  • 当然这个例子只是...... 一个例子。所以请不要担心语义。

答案

ALTER TABLE `votes` ADD UNIQUE `unique_index`(`user`, `email`, `address`);

我有一个 MySQL 表:

CREATE TABLE `content_html` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `id_box_elements` int(11) DEFAULT NULL,
  `id_router` int(11) DEFAULT NULL,
  `content` mediumtext COLLATE utf8_czech_ci NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `id_box_elements` (`id_box_elements`,`id_router`)
);

并且 UNIQUE KEY 的工作方式与预期的一样,它允许 id_box_elements 和 id_router 的多个 NULL 行。

我正在运行 MySQL 5.1.42,所以可能在上面讨论的问题上有一些更新。幸运的是它有效,希望它能保持这种状态。

如果行中有 NULL 值,则多列唯一索引在 MySQL 中不起作用,因为 MySQL 将 NULL 视为唯一值,并且至少当前没有逻辑可以在多列索引中解决它。是的,这种行为是疯狂的,因为它限制了很多合法的多列索引应用程序,但它就是这样...... 到目前为止,这是一个在 MySQL 上标记为 “无法修复” 的错误错误轨道...