2012-05-01 27 views
0

私はこれがストアドプロシージャなしで実行できると楽観的ではありませんが、次のことが可能であるかどうか不思議です。mySqlに、更新が失敗した場合に挿入する更新/挿入コンボがありますか?

一致を検出した場合にローを更新し、更新していない値をテーブルに挿入しない場合は、ローを更新する単一のクエリ挿入/更新を書きたいと考えています。

だから... ...イベントで

updateInsert into table_a set n = 'foo' where p='bar'; 

のようなもの何行のp =「バー」の存在しないこと、それは自動的にtable_aセットN =「FOO」内に挿入されます。

EDIT: 2つのコメントに基づいて、nがPRIMARY KEYではないことを明確にする必要があり、テーブルには実際には重複する行が必要です。私はちょうど特定のエントリがユニークである必要がある状況を持っています...おそらく私は悪い方法でメタファを混ぜるだけで、このキーが一意である別のテーブルにこれを引き出す必要があります。

+2

リファレンススレッド - http://stackoverflow.com/questions/1361340/how-to-insert-if-not-exists-in-mysql – adatapost

+0

すべての?: http://stackoverflow.comでこのヘルプをい/ questions/6107752/how-to-perform-an-upsert-so-that-i-can-use-both-new-and-old-update-par-bar – dweiss

答えて

0

私はテーブルスキーマでこれを強制します - ターゲットテーブルに一意のマルチカラムキーを使用し、INSERT IGNORE INTOを使用してください - 重複キーにエラーを投げますが、挿入時にエラーを無視します。

+0

右...私はこれを考慮しましたが、私の問題は、私がチェックしている列(私の例ではn)はPRIMARY KEYSではないということです。私は彼らが必要とする感覚を得ます。問題は、テーブルが実際には重複行を受け入れる必要があるということです。特定の状況では回避したいだけで、この2つのステップ(挿入しない場合は更新が存在する場合)を実行する必要があります。 –

+0

主キーを使用する必要はありません。複数列の一意のキーを使用できます。たとえば、mysqlでは、 'ALTER TABLE' mydb'.'テスト 'ADD UNIQUE' my_multicolumn_key'( 'uid'、' fid') ' – philwinkle

+0

が表示されます。ありがとう。私が言ったように、私はこのテーブル(行ID以外)に完全に重複する行を持たせる必要があるので、私が探しているものではありません。しかし、これは列がユニークな集合に結合できる場合の素晴らしいアプローチです。 –

関連する問題