sql 批量插入语句时, 如果唯一键冲突, 没有 err 返回, 这是正常情况?

2021-01-07 09:59:31 +08:00
 bthulu
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())
}
1441 次点击
所在节点    Go 编程语言
3 条回复
bthulu
2021-01-07 10:34:26 +08:00
解决了. sqlite3 驱动 github.com/mattn/go-sqlite3 的问题
dorothyREN
2021-01-07 22:22:51 +08:00
唯一键冲突?还不报错?莫非是个假的数据库
bthulu
2021-01-08 08:58:50 +08:00
@dorothyREN 我搞错了, 唯一键定义成 CONFLICT IGNORE 了, 于是冲突就被忽略了
```
CONSTRAINT "uk_xid" UNIQUE ("xid") ON CONFLICT IGNORE
```

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/742415

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX