2013-01-31 66 views
2

我的MySQL表這樣MySql的插入,如果不存在兩個列對否則更新

CREATE TABLE IF NOT EXISTS tbl_member_doc_read (
`read_id` INTEGER(10) UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT , 
`member_id` INTEGER(10) UNSIGNED NOT NULL , 
`doc_id` INTEGER(10) UNSIGNED NOT NULL , 
`status` INTEGER(1) DEFAULT '0', 
FOREIGN KEY (`member_id`) REFERENCES tbl_member(`member_id`), 
FOREIGN KEY (`doc_id`) REFERENCES tbl_doc(`doc_id`) 
) ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_general_ci; 

可以說,表

read_id member_id doc_id status 
1   1   1  1 
2   1   2  0 
3   2   2  1 

現在我想在表中插入,如果並結合實例數據ID或對(member_id,DOC_ID)是存在其他更新狀態,如果狀態是0 這裏是我用

INSERT INTO tbl_member_doc_read (member_id, doc_id, status) VALUES(1,2,1) ON DUPLICATE KEY UPDATE status = VALUES(status) WHERE status = 0; 
SQL查詢10

它應該更新第二行與數據2 1 2 1

,如果我插入此

INSERT INTO tbl_member_doc_read (member_id, doc_id, status) VALUES(2,1,0) ON DUPLICATE KEY UPDATE status = VALUES(status) WHERE status = 0; 

它應該插入一個新行與數據4 2 1 0

但我不能解決這個問題。 而且我認爲在innodb引擎中,member_id和doc_id被引用到另一個表的主鍵,它們是唯一的。在innodb中,我無法創建獨特的索引。

任何幫助將不勝感激。提前致謝。

+0

「狀態」可以是其他任何東西比1還是0?如果不是,那麼你的WHERE條件是多餘的。 – Strawberry

+0

重複鍵更新只適用於在表 –

回答

2

爲了工作ON DUPLICATE KEY UPDATE聲明,您需要定義上的兩列unique鍵,

CREATE TABLE IF NOT EXISTS tbl_member_doc_read 
(
`read_id` INTEGER(10) UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT , 
`member_id` INTEGER(10) UNSIGNED NOT NULL , 
`doc_id` INTEGER(10) UNSIGNED NOT NULL , 
`status` INTEGER(1) DEFAULT '0', 
FOREIGN KEY (`member_id`) REFERENCES tbl_member(`member_id`), 
FOREIGN KEY (`doc_id`) REFERENCES tbl_doc(`doc_id`), 
CONSTRAINT tb_uq UNIQUE (member_id, doc_id) 
) ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_general_ci; 

然後取出WHERE條款

INSERT INTO tbl_member_doc_read (member_id, doc_id, status) 
VALUES(1,2,1) 
ON DUPLICATE KEY UPDATE 
status = VALUES(status) 
+0

中聲明爲UNIQUE的列其工作良好。謝謝 –

+0

不客氣':D' –

+0

你的SQLFiddle演示鏈接已損壞。 :( – Sablefoste

相關問題