SQLLite中多字段约束怎么设置呢?我们常用的是设置一个字段的约束设置为unique。如果是要约束多个字段呢?通常我们是这样使用的:

Create Table test(code varchar(10) unique not null)

Insert into test(code)
values('00000');


当重复执行 Insert时会遇到错误:[20:45:52] Error while executing SQL query on database 'test': UNIQUE constraint failed: test.code

如果我们设置两个字段的唯一约束呢?以下是个简单的示例:

Create Table devices(
    ID INTEGER PRIMARY KEY AUTOINCREMENT, 
    code varchar(10) not null,
    model char(4) not null,
    name text not null,stauts INTEGER NOT NULL DEFAULT (0),
    updatedate DATETIME DEFAULT (datetime('now', 'localtime') ) ,
    updater TEXT DEFAULT(''),
    UNIQUE(code, model) ON CONFLICT REPLACE);


Insert into devices(code,model,name)
Values('RTM-2019-QWM','W001','模型1')


Insert into devices(code,model,name)
Values('RTM-2019-QWM','W001','模型2')

执行以上语句会有什么结果呢?它可能会得到你想不到的结果,
[20:38:14] Query finished in 0.024 second(s). Rows affected: 1

重复执行也没有问题,但是会执行REPLACE,但表中数据始终是一条。

ID    code    model    name    stauts    updatedate    updater
4    RTM-2019-QWM    W001    模型2    0    2021-10-01 20:39:27