2016-08-23 36 views
0

這就是我的表的樣子。如何執行MySQL UPSERT

CREATE TABLE `answers` (
`id` INT(11) NOT NULL AUTO_INCREMENT, 
`basicinfo_id` INT(11) NOT NULL, 
`question_id` INT(11) NOT NULL, 
`answer` INT(11) NOT NULL, 
PRIMARY KEY (`id`), 
INDEX `question_id` (`question_id`), 
INDEX `basicinfo_id` (`basicinfo_id`), 
CONSTRAINT `basicinfo_id` FOREIGN KEY (`basicinfo_id`) REFERENCES `basic_info` (`id`) ON UPDATE NO ACTION ON DELETE NO ACTION, 
CONSTRAINT `question_id` FOREIGN KEY (`question_id`) REFERENCES `questions` (`id`) ON UPDATE NO ACTION ON DELETE NO ACTION) COLLATE='latin1_swedish_ci' ENGINE=InnoDB AUTO_INCREMENT=3383; 

這是數據如何能像

enter image description here

我想,如果他們已經存在「basicinfo_id」更新的答案。 或 如果我更改question_id 1,2和3的答案。我該如何插入數據。

我試過這個查詢,但它沒有更新結果。

INSERT INTO answers (basicinfo_id, question_id, answer) VALUES('98', 1, '1'),('98', 2, '1'),('98', 3, '1'),('98', 4, '1'),('98', 5, '1') ON DUPLICATE KEY UPDATE basicinfo_id = 98; 

我已經定義了一個複合唯一鍵現在這是它的樣子,但它仍然沒有工作。

CREATE TABLE `answers` (
`id` INT(11) NOT NULL AUTO_INCREMENT, 
`basicinfo_id` INT(11) NOT NULL, 
`question_id` INT(11) NOT NULL, 
`answer` INT(11) NOT NULL, 
PRIMARY KEY (`id`), 
UNIQUE INDEX `basicinfo_id_question_id` (`basicinfo_id`, `question_id`), 
INDEX `question_id` (`question_id`), 
INDEX `basicinfo_id` (`basicinfo_id`), 
CONSTRAINT `basicinfo_id` FOREIGN KEY (`basicinfo_id`) REFERENCES `basic_info` (`id`) ON UPDATE NO ACTION ON DELETE NO ACTION, 
CONSTRAINT `question_id` FOREIGN KEY (`question_id`) REFERENCES `questions` (`id`) ON UPDATE NO ACTION ON DELETE NO ACTION) COLLATE='latin1_swedish_ci' ENGINE=InnoDB AUTO_INCREMENT=3718; 
+2

永遠不會發生更新插入。你永遠不會導致重複的密鑰違規。只有當存在唯一的密鑰違規時,「重複密鑰」纔會實際觸發。沒有重點違規,沒有更新。 –

+0

對不起,如果我來這裏有點無知,但如果我設置basicinfo_id爲UNIQUE它不會允許重複basicinfo_id,我不想但如果我設置basicinfo_id和question_id都作爲複合獨特的關鍵,那麼它是可能的。我有什麼意義嗎? – Shaonline

+0

是的,在這種情況下,您需要一個複合唯一密鑰。 –

回答

1

ON DUPLICATE KEY UPDATE basicinfo_id = 98;是畸形

試試這個: ON DUPLICATE KEY UPDATE 'answer' = VALUES('answer');

如果一個唯一的密鑰已經存在,它會更新answer