1

次の構造を持つ friends というテーブルがあります。

id
user_id
friend_id

行を一意にしたいので、たとえば:

1, 6, 12
2, 6, 12

壊れます!私はこれを達成しました:ALTER TABLE friends ADD UNIQUE INDEX user_id_friend_id (user_id, friend_id);

しかし、次のことも不可能にしたい

1, 6, 12
2, 12, 6

それ、どうやったら出来るの?同じステートメントを実行しようとしましたが、フィールドを逆にしましたが、うまくいきませんでした...何かアイデアはありますか?

4

1 に答える 1

2

トリガーを使用user_id <= friend_idして、一意の制約を使用すると、目的が達成されることを確認できます。次のような挿入および更新トリガーが必要です。

Create Trigger
  Friends_ins_check 
Before Insert On
  Friends
For Each Row
Begin
  If new.user_id > new.friend_id Then
    Set @temp = new.user_id;
    Set new.user_id = new.friend_id;
    Set new.friend_id = @temp;
  End If;
End

于 2012-12-16T23:17:59.527 に答える