2

テーブルに3つの列があるとしましょう。次に、列3がxに等しい場合にのみ、列1と2の組み合わせが一意になるようにすることができますか?

それはこの仕事をするでしょう:

-------------------------------------------------- ---
| A | B | C |
-------------------------------------------------- ---
| 1 | 2 | x |
-------------------------------------------------- ---
| 2 | 1 | x |
-------------------------------------------------- ---
| 0 | 0 | y |
-------------------------------------------------- ---
| 0 | 0 | y |
-------------------------------------------------- ---

そして、これはしません:

| A | B | C |
-------------------------------------------------- ---
| 2 | 2 | x |
-------------------------------------------------- ---
| 2 | 2 | x |
-------------------------------------------------- ---
| 0 | 0 | y |
-------------------------------------------------- ---
| 0 | 0 | y |
-------------------------------------------------- ---
4

2 に答える 2

2

トリガーを作成できます。

DELIMITER ;;

CREATE TRIGGER special_unique_test BEFORE INSERT ON my_table FOR EACH ROW
IF NEW.C = 'x' AND EXISTS (
  SELECT * FROM my_table WHERE A = NEW.A AND B = NEW.B AND C = 'x'
) THEN
  CALL raise_error;
END IF;;

DELIMITER ;

(A, B, C)この適度なパフォーマンスを維持するために、インデックスを維持することをお勧めします。

ただし、これでは、、などを使用しても、本物のキーと同じメリットは得られINSERT ... ON DUPLICATE KEY UPDATEませREPLACEUNIQUE

于 2012-10-14T10:21:53.813 に答える
0

試す:

select distinct a, b, c
from mytable
where c = 'x'
union all
select a, b, c
from mytable
where c <> 'x'
于 2012-10-14T10:15:52.417 に答える