如何为多个列创建唯一约束?

时间:2020-08-14 08:35:18

标签: sql go go-gorm

我具有以下结构,并且想在(UserId和Contact)上创建唯一索引。在gorm中有可能吗?

type Contact struct {
    gorm.Model
    UserId    uint   `gorm:"index;not null"`
    Contact string `gorm:"type:text;not null"`
}

我想创建类似的表

CREATE TABLE contact (...column definitions ...) 
    CONSTRAINT constraint1
    UNIQUE (user_id, contact) 

1 个答案:

答案 0 :(得分:3)

models上的文档为INDEXUNIQUE_INDEX指定了以下内容:

INDEX创建具有或不具有名称的索引,相同名称将创建组合 索引

UNIQUE_INDEX与INDEX一样,创建唯一索引

这意味着具有相同UNIQUE_INDEX名称的两个字段将创建一个复合唯一索引。

在您的示例中使用名为compositeindex的复合索引的完整结构定义变为:

type Contact struct {
    gorm.Model
    UserId    uint   `gorm:"UNIQUE_INDEX:compositeindex;index;not null"`
    Contact   string `gorm:"UNIQUE_INDEX:compositeindex;type:text;not null"`
}