0

「UserFriends」という名前の mysql に 1 つのテーブルがあり、そこでウェブサイト ユーザーの友人の詳細を更新しています。

これがテーブルのスキーマです(UserFriends)

id  int,
Userid int,
friendid int,
createdate timespan

ここで、ユーザー ID とフレンド ID に一意のインデックスを作成したいと考えています。私はユニークなインデックスをうまく作成しました。そのため、現在、同じユーザー ID とフレンド ID を重複して挿入することはできません。しかし、反対のフィールドに同じ値を挿入すると、エラーを生成せずに受け入れられます。

例 :

insert into userfriends ( userid, friendid )
select 1, 2  --- insert perfect
insert into userfriends ( userid, friendid )
select 1, 2  --- show error because unique index comes in a picture

今私は挿入しています

insert into userfriends ( userid, friendid )
select 2, 1  --- records insert here (i don't want this)

どうすればこれを防ぐことができますか?

4

1 に答える 1

0

まず最初に:挿入物については、混乱を招く可能性があるため、値を生成するために「select」を使用しないでください。代わりに、次のようにしてください。

INSERT INTO userfriends (userid, friendid) VALUES (1, 2)

とはいえ、逆方向にも機能する一意の修飾子を使用する唯一の方法は、プログラムで実行することです。x、yが受け入れられSELECT * FROM userfriends WHERE userid = y AND friendid = xないようにする場合は、実行し、結果が得られた場合は、挿入を拒否してから実行します。そうでない場合は、通常どおりテーブルに挿入すると、一意のキーによってそれ以降は拒否されます。

于 2013-03-23T12:42:28.413 に答える