I次の表があります。Mysql ERROR 1062(23000):重複エントリ。ユニーク制約に違反しません更新行
CREATE TABLE `user_favourite_posts` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`post_id` int(11) NOT NULL,
`user_id` int(11) NOT NULL,
`created_at` datetime NOT NULL
PRIMARY KEY (`id`),
UNIQUE KEY `user_post_unique` (`user_id`,`post_id`))
私は= 1005、以下のようなものをpost_idのために(1000年、1001年)にpost_idの持つすべての行を更新しようとしています:重複するキー 'user_post_unique' のエントリ1005:
ERROR 1062(23000):
update user_posts set post_id=1005 where post_id in(1000, 1001);
しかし、私は理由user_post_unique制約の次のエラーを取得しています
良い。これは期待どおりに動作しています。
しかし、制約に違反しないすべての行を更新したいと思います。 1つの文で可能ですか?サブクエリで同じテーブルを使用できないため、いくつかのmysqlフラグを削除したり、一時テーブルを使用したりすることなく、どのように処理するかを理解できません。
UPDATE:
たとえば、次のようなデータに
+-------+---------+---------+
| id | user_id | post_id |
+-------+---------+---------+
| 4581 | 2 | 1001 |
| 9739 | 2 | 1005 |
| 7324 | 3 | 1001 |
+-------+---------+---------+
を持つ私は問題なくすべての行を更新したいと思いますので、id 4581
との一つは、私はこのことを考えると同じ
これはできません。そのため、テーブルにユニークな制約があり、発生したくないパターンを防ぐことができます。 –
はい、わかりました。私は今質問を編集しています。なぜなら、私が本当に望むのは、関係をまだ持っていないユーザーでこれらの行を更新することだからです。複製の場合、私はそれらのうちの1つを削除するだけです。 – y2josei
それは間違っています。ゴードンの権利:制約は、ここで仕事をしていて、あなたが気まぐれに物事を壊すのを防ぎます。より慎重に要件を考える必要があります。 –