MySQL複合キー-一意の組み合わせ


-1

aおよびb、およびa,bペアからの複合一意キーを持つテーブルがあるとします。そして、列がありa=1, b=2ます。

したがってa=1, b=2、別の行を挿入することはできません。

しかし、このような状況で行を挿入することをどのように拒否できa=2, b=1ますか?

例えば:

CREATE TABLE `t` (`a` INT, `b` INT); 
ALTER TABLE `t` ADD UNIQUE(`a`, `b`); 
INSERT INTO `t` (`a`, `b`) VALUES ('1', '2'); 
INSERT INTO `t` (`a`, `b`) VALUES ('2', '1');

2番目の挿入は機能しますが、失敗することを期待しています。


それがために、同じように動作したいようですねa=2b=1ちょうどそれがために同じようにa=1b=2あなたはすでにこの質問への答えを持っているので。これは、あなただけのどこのテーブルに1つのレコードを持っていることを意味だろうa=2b=1、それがために働くだろうと同じようにa=1してb=2....その一意のキーコンボを許可された唯一のものをあなたは私にはコントロール下にそれを得たような音-そのレコードのために。 ...つまり、UNIQUE KEY 'uk_ab' ('a','b')これはあなたの質問の例と同じように両方で機能します。
ピンプジュースIT

UNIQUE KEY uk_ab (a,b)存在するa=2,b=1場合に挿入を許可a=1,b=2:(
Alexey

例で投稿を更新しました。
アレクセイ

はい、それは正しいように聞こえます、それはそれらに同じ値の1つのレコードを許可するので、私にとって正しいように聞こえます。a=2,b=11つのレコードでa=1,b=2あり、別のレコードです。aとbが何らかの値に等しい場合、それぞれが真であるレコードは1つしか持てないため、2つの例は異なり、同じではないので正しいです。それらが再び同じ場所に別のレコードを挿入し、それが機能していることを確認してください。
ポン引きジュースIT

回答:


2

キー/インデックスの定義ではできません。DBの観点からは、(1,2)と(2,1)の値は常に異なります。

解決策は、たとえばa常に常により高い値を持つこと、bまたはその逆を保証することです。レコードを追加するアプリケーションで、またはDBトリガーとしてこれを確認できます。

参照:トリガーを使用してこれを行う方法の例が含まれるMySQLの一意の組み合わせキー

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.