Golang Go语言中 sql 批量插入语句时, 如果唯一键冲突, 没有 err 返回, 这是正常情况?
Golang Go语言中 sql 批量插入语句时, 如果唯一键冲突, 没有 err 返回, 这是正常情况?
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())
}
更多关于Golang Go语言中 sql 批量插入语句时, 如果唯一键冲突, 没有 err 返回, 这是正常情况?的实战教程也可以访问 https://www.itying.com/category-94-b0.html
解决了. sqlite3 驱动 github.com/mattn/go-sqlite3 的问题
更多关于Golang Go语言中 sql 批量插入语句时, 如果唯一键冲突, 没有 err 返回, 这是正常情况?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
我搞错了, 唯一键定义成 CONFLICT IGNORE 了, 于是冲突就被忽略了<br>CONSTRAINT "uk_xid" UNIQUE ("xid") ON CONFLICT IGNORE<br>
在Go语言(Golang)中使用SQL进行批量插入时,如果唯一键冲突而没有返回错误(err),这通常不是一个正常情况。以下是对此现象的详细解释:
-
数据库约束:唯一键(Unique Key)是数据库表中的一个约束,用于确保某一列或某几列的组合在表中是唯一的。当尝试插入重复值时,数据库通常会阻止这种操作并返回一个错误。
-
Go语言中的SQL处理:在Go语言中,通过
database/sql
包或ORM(对象关系映射)工具执行SQL语句时,应该能够捕获到数据库返回的错误。如果唯一键冲突而没有返回错误,可能是因为:- 错误处理不当:检查你的代码,确保在执行插入操作后有适当的错误检查和处理逻辑。
- 数据库配置或驱动问题:某些数据库驱动或配置可能导致错误没有被正确传递回Go应用。
- 事务处理:如果你是在事务中执行插入操作,并且事务在后续被回滚或未正确提交,也可能导致看似没有错误的情况。
-
建议:
- 确保你的Go代码中有适当的错误处理逻辑。
- 检查数据库驱动和配置,确保它们能够正确返回错误。
- 使用日志记录来捕获和诊断可能的错误。
- 在开发环境中测试各种边界情况,包括唯一键冲突,以确保你的应用能够正确处理这些情况。
总之,唯一键冲突而没有返回错误通常表明存在代码或配置问题,需要仔细检查和修正。