我有一个Relationships
表,我试图将复合索引添加到:
CREATE UNIQUE INDEX idx_relationship_userid_friend_id on Relationships(user_id, friend_id);
我希望阻止user_id
和friend_id
列的重复条目。即,user_id
= 26和friend_id
= 46的第二次输入应该给出错误。
我运行了上面的命令。当我再次运行该命令时,我收到以下错误:
Duplicate entry '36-50' for key 'idx_relationship_userid_friend_id'
当我查看INDEXES
的结构时,我会看到下表:
在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 :(得分:0)
使用Unique
约束来处理您的问题,例如:
CONSTRAINT UC_user_friend UNIQUE (user_id, friend_id)
答案 1 :(得分:0)
由于您的表已经有重复项,因此尝试创建索引会出错,因此它不会添加它。
有关如何删除重复项的信息,请参阅How to delete duplicates on a MySQL table?。完成后,您可以添加唯一索引以防止添加新的重复项。