2017-08-09 111 views
0

我有一个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; 

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

问:我怎样才能避免重复的条目?

回答

0

使用Unique约束来处理您的问题,是这样的:

CONSTRAINT UC_user_friend UNIQUE (user_id, friend_id) 
0

因为你的表已经有重复,它会得到一个错误试图创建索引,因此它不添加它。

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

+0

感谢。我试着运行下面的命令,'ALTER IGNORE TABLE Relationships ADD UNIQUE(user_id,friend_id)'。我有一个错误。我相信这是因为该命令已被弃用。 – user1107173

+0

你是对的,它在5.7中被删除。 https://dev.mysql.com/worklog/task/?id=7395。在添加索引之前,您需要使用其他一些方法来摆脱重复项。 – Barmar