2

InnoDB エンジンを使用して、特に a (int) と b (string) の 2 つのフィールドを持つ MySQL テーブルを取得しました。

b の特定の値がテーブルに任意の回数表示されるように構造化したいのですが、表示されるたびに常に同じ値の a で表示される必要があります。つまり、私のテーブルが次のようになっているとします。

(a,b)
(1,'foo')
(2,'bar')
(2,'bar')
(2,'baz')

(1,'foo')、(2,'bar')、または (2,'qux') をテーブルに正常に挿入できるはずですが、(2,'foo')、(1,' bar') または (1,'baz') は、b のこれらの文字列値が表示されるときは常に a の同じ値で表示されるため、失敗するはずです。

これを効率的に行う方法はありますか?私はトランザクションで遊んでいますSELECT ... FOR UPDATEが、運がありません。テーブル構造が間違っていますか?

4

2 に答える 2

1

私は最終的に次のようなステートメントを使用しました。

 INSERT INTO mytable(`a`,`b`) SELECT 1,'foo' FROM dual WHERE NOT EXISTS
 (SELECT * FROM mytable WHERE a != 1 AND b = 'foo')

ネストされた選択が行を返さない場合にのみ行を挿入します。

于 2011-05-23T20:48:58.307 に答える
0

のようなものはどうですか

存在する場合 (a!=prm_a および b=prm_b の mytable から null を選択)、次に挿入 ... そうでない場合は end を上げます。

?

于 2011-05-18T13:35:29.707 に答える