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

Dev*_*One 1 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
Run Code Online (Sandbox Code Playgroud)

如你所见,"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"
Run Code Online (Sandbox Code Playgroud)

对于"ml_id"和布尔"telco"的每个实例,我希望能够拥有唯一且唯一独特的"指示符".合理?

谢谢

Bre*_*len 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
Run Code Online (Sandbox Code Playgroud)