我有这张桌子
CREATE TABLE IF NOT EXISTS `links` (
`link_id` int(20) NOT NULL AUTO_INCREMENT,
`item1_id` int(20) NOT NULL,
`item2_id` int(20) NOT NULL,
PRIMARY KEY (`link_id`),
UNIQUE KEY `item_id` (`item1_id`,`item2_id`)
) ENGINE=InnoDB;
Run Code Online (Sandbox Code Playgroud)
如何约束它以便the item_id只能在OR中出现一次?item1_iditem2_id
因为我想要一个项目只链接到另一个项目..
我想要一个项目只链接到另一个项目
这意味着您不需要链接表.您只需要linkedItemId在Item表中使用一个列,该列具有唯一约束.一旦Item2链接到Item1(Item1ID在Item2行的linkedItemId中),那么其他任何东西都不能链接到Item1.
此外,链接表不需要自己的代理键
编辑,请注意,MySQL允许在唯一索引中使用多个NULL(与SQL Server不同,在SQL Server中,您使用过滤的唯一索引来忽略NULL)
来自MySQL 5.5 CREATE INDEX
对于所有引擎,UNIQUE索引允许可以包含NULL的列的多个NULL值