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」のために存在する場合の答えを更新したい
のように見えることができる方法です。 OR 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;
を更新しますが存在する場合
ON DUPLICATE KEY UPDATE 'answer' = VALUES('answer');
を。鍵の重複を重複させることはありません。一意のキー違反がある場合にのみ、「重複キー」のものが実際にトリガーされます。キー違反、更新なし。 –
私はここで少し無知になる場合は申し訳ありませんが、私はbasicinfo_idをUNIQUEに設定すると重複しないbasicinfo_idは許可されませんが、basicinfo_idとquestion_idの両方を複合ユニークキーとして設定すると可能です。何か意味があるのですか? – Shaonline
はい、この場合、複合ユニークキーが必要です。 –