2017-08-09 123 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