You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MYSQL INSERT语句是否会返回非1数值?JDBC场景下问题咨询

结论

存在JDBC执行该INSERT语句返回非1数值的合法场景,executeUpdate()的返回值为JDBC驱动统计的该语句执行影响的行数,非1返回的常见场景如下:

返回0的常见场景

  • 显式/隐式启用了插入冲突忽略规则:如果SQL包含INSERT IGNORE语法,或数据库、JDBC驱动配置了主键冲突不抛异常、静默丢弃冲突插入的规则,当插入的NAME已经在表中存在时,不会抛出SQL异常,会直接返回0,插入不生效。
  • 分区表插入数据不匹配分区规则:如果CAT_TABLE为分区表,插入的字段值不符合分区规则,且数据库未开启严格SQL校验模式,会静默丢弃该条插入,返回0而不抛出异常。
  • BEFORE INSERT触发器跳过插入:如果表上定义了BEFORE INSERT触发器,触发器逻辑中通过数据库支持的特殊语法终止当前行插入且未抛出SQL异常,也会返回0。
  • 插入对象为可更新视图:如果操作的CAT_TABLE是可更新视图,且视图定义的INSTEAD OF INSERT触发器逻辑跳过了插入操作,也会返回0。

返回大于1的常见场景

  • 触发级联写入操作:如果CAT_TABLE定义了外键级联插入、插入时需要同步更新关联的物化视图、索引组织表等特殊结构,部分JDBC驱动会将级联操作产生的影响行数也计入返回结果,此时返回值会大于1。
  • 驱动配置统计触发器影响行数:如果表上有AFTER INSERT触发器,且JDBC驱动开启了统计触发器执行DML的影响行数的配置,返回值会是主表插入行数+触发器影响的行数,大于1。
  • 插入对象为可更新视图:如果操作的CAT_TABLE是可更新视图,且视图定义的INSTEAD OF INSERT触发器执行了多条DML操作,返回值会是触发器执行DML的总影响行数,通常大于1。

你提供的示例为单值插入、无特殊配置的前提下,默认只会返回1,只有存在上述特殊配置、表结构、语法时才会出现非1返回值。

内容的提问来源于stack exchange,提问作者stackerstack

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.14 17:45:04