如何添加取决于外键值的唯一约束? [复制]
Posted
技术标签:
【中文标题】如何添加取决于外键值的唯一约束? [复制]【英文标题】:How to add unique constraint that depends of the foreign key values? [duplicate] 【发布时间】:2015-08-21 05:52:49 【问题描述】:我有一张表,其中包含外键“columnA”列和另一列“columnB”。我想防止在“columnB”中添加相同的值,但只在“columnA”中添加相同的值...
columnA columnB
1 'a'
1 'a' - this is not allowed
2 'a' - this is allowed
从我的角度来看,这样做的唯一方法是使用触发器,但我认为有更好、更优雅的方法来进行此约束。你知道制作这个逻辑的最佳方法吗?
【问题讨论】:
【参考方案1】:唯一的约束可以工作。
alter table TableName add constraint UQ_consrtaint unique(columnA, columnB);
应该可以的。
【讨论】:
【参考方案2】:看起来您需要像这样创建一个主键:
DECLARE @DataSource TABLE
(
[A] TINYINT
,[B] CHAR
,PRIMARY KEY([A], [B])
);
INSERT INTO @DataSource ([A], [B])
VALUES (1, 'a'); -- ok
INSERT INTO @DataSource ([A], [B])
VALUES (2, 'a'); -- ok
INSERT INTO @DataSource ([A], [B])
VALUES (1, 'a'); -- error
它会给你以下错误:
消息 2627,级别 14,状态 1,第 14 行违反主键 约束“PK__#B1CFBEC__D86D1834E734E52B”。不能插入重复 键入对象“dbo.@DataSource”。重复键值为 (1, a)。
在上述情况下。
或两列上的唯一约束:
DECLARE @DataSource TABLE
(
[A] TINYINT
,[B] CHAR
,UNIQUE ([A], [B])
);
【讨论】:
【参考方案3】:ALTER TABLE tablename ADD UNIQUE uniqueconstraintname(columnA, columnB);
【讨论】:
以上是关于如何添加取决于外键值的唯一约束? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
初学者必备:MySQL的主键,外键与唯一约束设置(点赞!!!)