2012-09-25 47 views
0

我運行以下INSERT語句:的MySQL上的重複更新已不能正常工作

INSERT INTO list_subscribers (subscriberid, listid, emailaddress, domainname, format, confirmed, confirmcode, requestdate, requestip, confirmdate, confirmip, subscribedate, unsubscribed, unsubscribeconfirmed) 
VALUES ('203404', 1, '[email protected]', '@gmail.com', 'h', 1, '1234', 1282196458, '', 1282196458, '', 1282196458, 0, 0) 
ON DUPLICATE KEY UPDATE emailaddress='[email protected]', domainname = '@gmail.com', unsubscribed = 0, unsubscribeconfirmed = 0 

而且我收到以下錯誤回:

Error Code: 1062. Duplicate entry '[email protected]' 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 

我認爲這正是「ON DUPLICATE KEY UPDATE」語句的用意?爲什麼因爲重複索引而中止查詢?

+0

爲什麼你提供一個自動遞增的id值? –

回答

1

好吧,看起來重複的問題實際上是與更新。由於爲emailaddress,listid定義了一個唯一的密鑰,當它試圖進行更新時,實際上有另一個具有不同訂戶ID的條目,但具有相同的emailaddress和listid。

這對我來說更有意義,因爲它是實際產生重複錯誤的Update語句,而不僅僅是插入語句。