MySQL在重复更新时不工作

MySQL在重复更新时不工作,mysql,Mysql,我正在运行以下Insert语句: INSERT INTO list_subscribers (subscriberid, listid, emailaddress, domainname, format, confirmed, confirmcode, requestdate, requestip, confirmdate, confirmip, subscribedate, unsubscribed, unsubscribeconfirmed) VALUES ('203404', 1, 'b

我正在运行以下Insert语句:

INSERT INTO list_subscribers (subscriberid, listid, emailaddress, domainname, format, confirmed, confirmcode, requestdate, requestip, confirmdate, confirmip, subscribedate, unsubscribed, unsubscribeconfirmed) 
VALUES ('203404', 1, 'blah@gmail.com', '@gmail.com', 'h', 1, '1234', 1282196458, '', 1282196458, '', 1282196458, 0, 0 ) 
ON DUPLICATE KEY UPDATE emailaddress='blah@gmail.com', domainname = '@gmail.com', unsubscribed = 0, unsubscribeconfirmed = 0
我得到了以下错误:

Error Code: 1062. Duplicate entry 'blah@gmail.com-1' for key 'subscribers_email_list_idx'
我的桌子是这样的:

CREATE TABLE `list_subscribers` (
    `subscriberid` int(11) NOT NULL AUTO_INCREMENT,
    `listid` int(11) NOT NULL DEFAULT '0',
    `emailaddress` varchar(200) DEFAULT NULL,
    `domainname` varchar(100) DEFAULT NULL,
    `format` char(1) DEFAULT NULL,
    `confirmed` char(1) DEFAULT '0',
    `confirmcode` varchar(32) DEFAULT NULL,
    `requestdate` int(11) DEFAULT '0',
    `requestip` varchar(20) DEFAULT NULL,
    `confirmdate` int(11) DEFAULT '0',
    `confirmip` varchar(20) DEFAULT NULL,
    `subscribedate` int(11) DEFAULT '0',
    `bounced` int(11) DEFAULT '0',
    `unsubscribed` int(11) DEFAULT '0',
    `unsubscribeconfirmed` char(1) DEFAULT '0',
    `formid` int(11) DEFAULT '0',
    PRIMARY KEY (`subscriberid`),
    UNIQUE KEY `subscribers_email_list_idx` (`emailaddress`,`listid`),
    KEY `list_subscribers_sub_list_idx` (`subscriberid`,`listid`),
    KEY `subscribe_date_idx` (`subscribedate`),
    KEY `list_subscribers_listid_idx` (`listid`),
    KEY `confirmed_idx` (`confirmed`)
) ENGINE=InnoDB AUTO_INCREMENT=4687107 DEFAULT CHARSET=utf8

我认为这正是“关于重复密钥更新”语句的目的?为什么它会因为重复索引而中止查询?

好的,看起来重复问题实际上与更新有关。因为有一个为emailaddress定义的唯一键listid,所以当它尝试进行更新时,实际上有另一个条目具有不同的订户id,但具有相同的emailaddress和listid


这对我来说更有意义,因为实际产生重复错误的是Update语句,而不仅仅是insert语句。

为什么要为自动递增id提供一个值?