2011-08-05 5 views
1

は、私はテーブルがあるとします。mySQLは特定の列を別の列に基づいてUNIQUEとして定義できますか?

CREATE TABLE `ml_vendor_refs` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `ml_id` int(11) NOT NULL, 
    `ven_id` int(11) NOT NULL, 
    `designator` int(4) NOT NULL, 
    `telco` tinyint(1) NOT NULL DEFAULT '0', 
    PRIMARY KEY (`id`) 
) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=latin1 

あなたが見ることができるように、「ID」が主とAIです。しかし、私は、 'ml_id'と 'telco'の親に基づいて、私が複製していない複数の行の 'designator'を追加できるようにしたい。たとえば :「ml_id」のすべてのインスタンスとブール「電話会社」のための

"id" "ml_id" "ven_id" "designator" "telco" 
"1"  "5144" "3"   "1"   "0" 
"2"  "5144" "7"   "2"   "0" 
"3"  "5144" "44"   "3"   "0" 
"4"  "5144" "49"   "4"   "0" 

、私は、ユニークで独特ONLY「指定子」を持っていることができるようにしたいです。理にかなっている?

ありがとう

+0

だから、あなたは 'ml_id'と' telco'同じ値で二回ではなく1の 'designator'を持つことができます。あれは正しいですか?この場合、3つの列に一意のインデックスを追加することができます。http://dev.mysql.com/doc/refman/5.0/en/create-index.html –

+0

@Brendan - これを投票して投票することができますアップ! – nickf

+0

@nickf done! :) –

答えて

0

一意のインデックスを複数の列に追加すると、一意のペアリングを定義できます。たとえば、ml_id, designatorにインデックスを追加して、ペアを一意にすることができます。

私が知る限り、NULL値には一意の制約がありません。

+0

この場合、すべての列はすでに「NOT NULL」として指定されていますが、それは一意のインデックスを覚えておく価値があります –

5

UNIQUEインデックスは複数の列にまたがるインデックスよりも大きい場合があります。結果は、同じ値が1つの列に複数回表示されるが、同じ値の組み合わせが指定された列に表示されないような制限があります。

CREATE TABLE `ml_vendor_refs` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `ml_id` int(11) NOT NULL, 
    `ven_id` int(11) NOT NULL, 
    `designator` int(4) NOT NULL, 
    `telco` tinyint(1) NOT NULL DEFAULT '0', 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `designators` (`designator`,`ml_id`,`telco`) 
) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=latin1 
1
UNIQUE(ml_id, telco, designator) 
関連する問題