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;
這是數據如何能像
我想,如果他們已經存在「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;
永遠不會發生更新插入。你永遠不會導致重複的密鑰違規。只有當存在唯一的密鑰違規時,「重複密鑰」纔會實際觸發。沒有重點違規,沒有更新。 –
對不起,如果我來這裏有點無知,但如果我設置basicinfo_id爲UNIQUE它不會允許重複basicinfo_id,我不想但如果我設置basicinfo_id和question_id都作爲複合獨特的關鍵,那麼它是可能的。我有什麼意義嗎? – Shaonline
是的,在這種情況下,您需要一個複合唯一密鑰。 –