防止重复条目复合索引

时间:2017-08-09 14:35:50

标签: mysql sql

我有一个Relationships表,我试图将复合索引添加到:

CREATE UNIQUE INDEX idx_relationship_userid_friend_id on Relationships(user_id, friend_id);

我希望阻止user_idfriend_id列的重复条目。即,user_id = 26和friend_id = 46的第二次输入应该给出错误。

我运行了上面的命令。当我再次运行该命令时,我收到以下错误: Duplicate entry '36-50' for key 'idx_relationship_userid_friend_id'

当我查看INDEXES的结构时,我会看到下表:

enter image description here

Create syntax旁边的表信息下,我有以下代码:

CREATE TABLE `Relationships` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `friend_id` int(11) DEFAULT NULL,
  `status` int(11) DEFAULT '1',
  `createdAt` datetime NOT NULL,
  `updatedAt` datetime NOT NULL,
  `user_id` int(11) DEFAULT NULL,
  `app_common` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `owner_id` (`user_id`),
  KEY `app_common` (`app_common`),
  CONSTRAINT `Relationships_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `Users` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
  CONSTRAINT `Relationships_ibfk_2` FOREIGN KEY (`app_common`) REFERENCES `AppCommon` (`id`) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=79 DEFAULT CHARSET=latin1;

但是,我能够在数据库中插入重复的记录。

问题:如何避免重复输入?

2 个答案:

答案 0 :(得分:0)

使用Unique约束来处理您的问题,例如:

CONSTRAINT UC_user_friend UNIQUE (user_id, friend_id)

答案 1 :(得分:0)

由于您的表已经有重复项,因此尝试创建索引会出错,因此它不会添加它。

有关如何删除重复项的信息,请参阅How to delete duplicates on a MySQL table?。完成后,您可以添加唯一索引以防止添加新的重复项。