SQLite中判断整数末两位及更新主键的更优方法咨询
SQLite更新主键末两位的方案验证与优化
你的现有方法是否正确?
你的字符串处理方法是完全正确的。从测试结果能看到,通过substring(format('%s', indexRow),-2)='55'精准筛选出了indexRow末两位为55的记录,结合added=55的条件后,目标记录全部命中;计算indexRow-5也恰好得到了末两位为50的目标值,逻辑没有问题。
更优方案:用数学运算替代字符串处理
虽然字符串方法简便,但整数取模运算的效率更高,尤其在数据量较大时,能减少字符串转换带来的额外开销,逻辑也更直接:
- 判断末两位为55:用取模运算
indexRow % 100 = 55(整数对100取模的结果就是末两位的数值) - 更新末两位为50:直接执行
indexRow - 5(55减5等于50,不会影响高位数值)
对应的测试查询语句
SELECT indexRow, indexRow - 5, indexRow % 100 FROM newSL WHERE added = 55 AND indexRow % 100 = 55 LIMIT 10;
事务内的更新操作(推荐)
BEGIN TRANSACTION; -- 执行更新 UPDATE newSL SET indexRow = indexRow - 5 WHERE added = 55 AND indexRow % 100 = 55; -- 验证更新条数或抽查结果 SELECT COUNT(*) AS updated_count FROM newSL WHERE added=55 AND indexRow%100=50; -- 确认无误后提交,否则执行 ROLLBACK; COMMIT;
两种方案对比
- 字符串方法:写法直观,适合快速验证,但性能略逊于数学运算
- 数学运算方法:性能更优,逻辑严谨,适合正式的批量更新操作
内容的提问来源于stack exchange,提问作者Gary
相关产品推荐
相关产品推荐

