stmt, err := tx.Prepare("insert into log_commited(id, xid, count, commited) values(?, ?, ?, ?)")
// xid 是唯一键
for i := 0; i < 100; i++ {
res, err := stmt.Exec(i, 0, i, 0)
if err != nil {
// 如果唯一键 xid 冲突, 导入插入不进去, 这里不会报错
log.Print(err)
}
// 如果唯一键 xid 冲突, 导入插入不进去, 这里返回影响行数为 0
log.Print(res.RowsAffected())
}
1
bthulu OP 解决了. sqlite3 驱动 github.com/mattn/go-sqlite3 的问题
|
2
dorothyREN 2021-01-07 22:22:51 +08:00
唯一键冲突?还不报错?莫非是个假的数据库
|
3
bthulu OP @dorothyREN 我搞错了, 唯一键定义成 CONFLICT IGNORE 了, 于是冲突就被忽略了
``` CONSTRAINT "uk_xid" UNIQUE ("xid") ON CONFLICT IGNORE ``` |