mySQL可以根据另一列将特定列定义为UNIQUE吗?

时间:2011-08-05 15:47:57

标签: mysql constraints 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”和布尔“telco”的每个实例,我希望能够拥有唯一且唯一唯一的“指示符”。有意义吗?

谢谢

3 个答案:

答案 0 :(得分: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 :(得分:1)

UNIQUE( ml_id, telco, designator )

答案 2 :(得分:0)

如果在多个列上添加唯一索引,则可以定义唯一的配对。例如,您可以在ml_id, designator上添加一个索引,强制配对是唯一的。

据我所知,NULL值不受限制。