小编The*_*tor的帖子

跨两列的 MySQL 唯一约束

我有一个定义关系的表

Src smallint(5) unsigned NOT NULL,
Dst smallint(5) unsigned NOT NULL,
other fields
Run Code Online (Sandbox Code Playgroud)

我需要添加一个约束,说明其中一列中是否存在给定值。
1) 不能在同一列中重复。
2) 也不能在其他列中重复。

这是无效的

src    dst
1      354
666    1
Run Code Online (Sandbox Code Playgroud)

由于值 1 出现在第一行中,因此它不能出现在第二行中。

如何定义这种类型的约束?

我正在对应用程序杠杆进行轻量级检查。但我希望数据库确保它。

更新:目前我有 7 种不同类型的关系,每种关系类型一张表。

更新 2:原来这只是一张包含所有关系的表,现在我要爆炸了

# variante
Create TABLE `productsRelationships3` (
  `relSrc` smallint(5) unsigned NOT NULL,
  `relDst` smallint(5) unsigned NOT NULL,
  PRIMARY KEY `src-dst-3` (relSrc, relDst),
  UNIQUE  `src-3` (relSrc)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

# this is the import
INSERT INTO productsRelationships3 SELECT relSrc, relDst FROM  productsRelationships WHERE relType=3;
DELETE FROM …
Run Code Online (Sandbox Code Playgroud)

mysql database-design constraint

5
推荐指数
2
解决办法
1万
查看次数

标签 统计

constraint ×1

database-design ×1

mysql ×1