2011-08-05 19 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'的父項不重複。 例如:

"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" 

爲「ml_id」和布爾「電信」的每一個實例,我希望能有獨特和唯一獨特的「指示器」。合理?

謝謝

+0

所以,你可以有一個1'designator'兩次,但不與'ml_id'和'telco'相同的值。那是對的嗎?在這種情況下,您可以在3列中添加一個唯一索引http://dev.mysql.com/doc/refman/5.0/zh-CN/create-index.html –

+0

@Brendan - 讓這個答案,以便我們可以投票向上! – nickf

+0

@nickf完成! :) –

回答

0

如果您在多個列上添加唯一索引,則可以定義唯一的配對。例如,您可以在ml_id, designator上添加一個索引,強制這些配對唯一。

據我所知,NULL值不受唯一約束。

+0

在這種情況下,所有列已被指定爲「NOT NULL」,但這是一個值得記住的唯一索引 –

5

你可以有一個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`), 
    UNIQUE KEY `designators` (`designator`,`ml_id`,`telco`) 
) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=latin1 
1
UNIQUE(ml_id, telco, designator) 
相關問題