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

Rok*_*lič 3 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"`
}
Run Code Online (Sandbox Code Playgroud)

我想创建类似的表

CREATE TABLE contact (...column definitions ...) 
    CONSTRAINT constraint1
    UNIQUE (user_id, contact) 
Run Code Online (Sandbox Code Playgroud)

Mar*_*arc 5

关于模型的文档为INDEXand指定了以下内容UNIQUE_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"`
}
Run Code Online (Sandbox Code Playgroud)

  • `UNIQUE_INDEX` 对我不起作用(没有显示任何错误);我不得不使用“uniqueIndex”代替 (5认同)