質問: データをアップデートするときの sql を検討しています。 ・category , name を評価 ・既存レコードと合致すれば、update ・なければ insert データが以下であった時、 category 1, name aaa , data d07 であれば、id 1 を update し category 4, name aaa , data d07 category 3, name bbb , data d07 category 1, name ddd , data d07 であれば、id 7 で insert したいと考えています。 | id | category | name | data | | --- | --- | --- | --- | | 1 | 1 | aaa | d01 | | 2 | 1 | bbb | d02 | | 3 | 1 | ccc | d03 | | 4 | 2 | aaa | d04 | | 5 | 2 | ddd | d05 | | 6 | 3 | aaa | d06 | | ------ | --------- | ------------ | --------- | category , name はいずれも重複を許可しています。(unique ではありません) id, category , name に PRIMARY KEY を設定すれば、REPLACE INTO でいけるかと思ったのですが、意図した動作にはなりませんでした。 `REPLACE INTO tmp (category, name, data) VALUES (1, 'aaa' , 'd07');` 普通に insert されます。。。 うまいやり方があれば、ご教示お願いします。
回答: > > id, category , name に PRIMARY KEY を設定すれば、REPLACE INTO でいけるかと思ったのですが、意図した動作にはなりませんでした。 > > > idはそもそもAIだと思うので、必ずユニークになる無意味な制約になりませんか? category, nameにユニークな複合インデックスを指定して試してみてください。