MySQLのマニュアルには次のように記載されています。
ON DUPLICATE KEY UPDATEを指定し、UNIQUE索引またはPRIMARYKEYに重複値を引き起こす行が挿入された場合
UNIQUEインデックスまたはPRIMARYKEYを持たないテーブルがあるが、列のエントリ(user_idなど)を複製したくない場合はどうなりますか。
MySQLでそれを行う方法はありますか?
MySQLのマニュアルには次のように記載されています。
ON DUPLICATE KEY UPDATEを指定し、UNIQUE索引またはPRIMARYKEYに重複値を引き起こす行が挿入された場合
UNIQUEインデックスまたはPRIMARYKEYを持たないテーブルがあるが、列のエントリ(user_idなど)を複製したくない場合はどうなりますか。
MySQLでそれを行う方法はありますか?
INSERT INTO `table` (value1, value2)
SELECT 'stuff for value1', 'stuff for value2' FROM `table`
WHERE NOT EXISTS (SELECT * FROM `table`
WHERE value1='stuff for value1' AND value2='stuff for value2')
LIMIT 1
これを試して:
INSERT INTO `table` (userid)
SELECT 'value for userid' FROM `table`
WHERE userid = 'value for userid' HAVING count(*) = 0
データベースでデータの整合性を制御する場合、UNIQUEインデックスは、そのデータにUNIQUE制約を作成するMYSQLの方法にすぎません。
データベースにデータの整合性を任せたくない場合は、アプリケーションまたはETLコードを使用して、他の方法でデータを制御する必要があります。通常、これには、値がまだ存在しないことを検証するために事前にテーブルをスキャンしてから、挿入を実行することが含まれます。
あなたが何をしようとしているのかについてより明確な質問をすることで、私たちはより良い答えを与えるのを助けることができます。