如何添加取决于外键值的唯一约束? [复制]

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);

【讨论】:

以上是关于如何添加取决于外键值的唯一约束? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

oracle 如何创建,可空唯一约束

初学者必备:MySQL的主键,外键与唯一约束设置(点赞!!!)

初学者必备:MySQL的主键,外键与唯一约束设置(点赞!!!)

mysql唯一约束

数据库键值约束

主键约束,外键约束,空值约束,默认值约束,唯一约束,检查约束的各个作用是啥?