2016-08-23 12 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; 

これは、データが、私は、彼らがすでに「basicinfo_id」のために存在する場合の答えを更新したい

enter image description here

のように見えることができる方法です。 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; 
+2

を更新しますが存在する場合 ON DUPLICATE KEY UPDATE 'answer' = VALUES('answer');

を。鍵の重複を重複させることはありません。一意のキー違反がある場合にのみ、「重複キー」のものが実際にトリガーされます。キー違反、更新なし。 –

+0

私はここで少し無知になる場合は申し訳ありませんが、私はbasicinfo_idをUNIQUEに設定すると重複しないbasicinfo_idは許可されませんが、basicinfo_idとquestion_idの両方を複合ユニークキーとして設定すると可能です。何か意味があるのですか? – Shaonline

+0

はい、この場合、複合ユニークキーが必要です。 –

答えて

1

あなたON DUPLICATE KEY UPDATE basicinfo_id = 98;はこのお試しください不正な形式の

です:ユニークなキーが既にそれがアップサートが発生することはありませんanswerフィールド

関連する問題