MYSQL Insert 语句会返回不是 1 的东西吗?
Posted
技术标签:
【中文标题】MYSQL Insert 语句会返回不是 1 的东西吗?【英文标题】:Will a MYSQL Insert statement ever return something not a 1? 【发布时间】:2021-06-30 14:49:40 【问题描述】:我正在尝试考虑一些错误场景,假设我们有一个简单的语句,例如:
INSERT INTO CAT_TABLE (NAME, BREED, AGE) VALUES ("Henry", "Siamese", 2)
这里的主键是猫的名字。在大多数情况下,如果不是所有情况,这应该返回 1。就 JDBC API 而言,是否有时间它可以返回不是 1 的东西?我知道如果值本身存在问题,它只会抛出 SQL 异常,但什么时候会抛出 0 或某个数值而不是 1?
更新:
使用此语句的 Java 代码类似于:
Connection connection = getConnection(...);
PreparedStatement ps = connection.prepareStatement(sql);
int result = ps.executeUpdate();
connection.commit();
return result;
【问题讨论】:
出于兴趣,你会如何处理一只也叫亨利的 2 岁大的波斯猫? 这应该返回 1 是什么意思? SQL 语句不是返回值的函数。 dev.mysql.com/doc/refman/8.0/en/insert.html @forpas 我添加了更新 @Stu 我要么抛出异常并返回返回的 sql 错误,要么使用 select,如果存在,则抛出异常 【参考方案1】:我假设您指的是 INSERT 语句的受影响的行。 INSERT 语句本身没有结果。 INSERT 语句影响的行数是插入的行数。
您可以从 SELECT 结果集中插入:
INSERT INTO mytable (col1, col2, col3) SELECT col1, col2, col3 FROM ...
该 SELECT 可能有零行、一行或多行的结果。
如果您使用 INSERT IGNORE 并且某些行成功而其他行由于错误而被忽略,则它也可能不是 SELECT 结果的行数。
您也可以在不使用 SELECT 语句的情况下创建插入多行的 INSERT 语句:
INSERT INTO mytable (col1, col2, col3)
VALUES (1,2,3), (4,5,6), (7,8,9), ...
这也可以报告受影响的行数超过 1。
【讨论】:
如果我们只坚持 1 次插入,它是否会返回任何不是 1 且不是异常的东西? @stackerstack No 异常是客户端语言的事情。如果插入行失败,则受影响的行数为零。 @BillKarwin 这个问题是在 JDBC API 的上下文中提出的。 如果只计算会报告 1 行受影响的场景,那么它们当然只会返回 1! :-)以上是关于MYSQL Insert 语句会返回不是 1 的东西吗?的主要内容,如果未能解决你的问题,请参考以下文章