5

我有一张桌子叫Animal. AnimalId是主键&我想将该列设置AnimalType_id为唯一(我有一个AnimalType表,需要在这里设置一个外键)

ALTER TABLE Animal
ADD UNIQUE Animal.AnimalType_id int

两个表中已经有数据,因此我无法删除该表。

然而,这会导致错误:

消息 102,级别 15,状态 1,第 2 行
'.' 附近的语法不正确。

4

5 回答 5

23

请参阅文档以了解如何添加表约束。

ALTER TABLE Animal ADD CONSTRAINT UQ_Animal_AnimalTypeId UNIQUE (AnimalType_id)

听起来 AnimalType_id 是一个外键,所以我只是想检查您是否理解,通过使此列唯一,您将关系建立为一对一 - 您只能拥有每种类型的一种动物。

由于您在添加唯一约束时遇到错误,因此我建议您实际上需要外键而不是唯一约束:

ALTER TABLE Animal
    ADD CONSTRAINT FK_Animal_AnimalType
    FOREIGN KEY
    (
        AnimalType_id
    )
    REFERENCES AnimalType
    (
        id
    )

我不得不猜测 AnimalType 表名的名称和它的主键列名 - 如果它们不正确,请更改它们。

于 2012-05-25T06:27:33.490 回答
2

如果您养成为您创建的所有对象(甚至约束)命名的习惯,那么以后需要禁用、删除或更改约束时会更容易:

ALTER TABLE Animal ADD CONSTRAINT UQ_Animal_Type UNIQUE (AnimalType_id)

通过创建唯一索引也可以获得更灵活的类似约束的效果。

于 2012-05-25T06:36:58.707 回答
0

我认为您正在尝试这样做:

ALTER TABLE Animal
ADD COLUMN AnimalType_id int;
于 2012-05-25T06:17:13.330 回答
0

该列中的数据似乎不是唯一的。在列上创建唯一约束时,不能有任何重复的条目(最多可以有一个空值)

于 2012-05-25T07:03:49.903 回答
-1

尝试这个

ALTER TABLE table_name 添加约束唯一(column_name)

于 2014-06-29T14:38:33.927 回答