首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取插入的“记录”和“重复”计数.选择。关于重复密钥更新

获取插入的“记录”和“重复”计数.选择。关于重复密钥更新
EN

Stack Overflow用户
提问于 2018-10-10 02:54:55
回答 1查看 495关注 0票数 6

INSERT ... SELECT... ON DUPLICATE KEY UPDATE以受影响的形式返回一个从(inserted count) + (updated count) * 2派生的数字,这是多处中的有据可查

但是,在MySQL命令行工具的输出中,我注意到了以下额外信息:

代码语言:javascript
复制
> INSERT INTO ...
-> SELECT ... FROM ...
-> ON DUPLICATE KEY UPDATE ...
-> ;
Query OK, 97 rows affected (0.03 sec)
Records: 2425  Duplicates: 28  Warnings: 0

即,数字Records:Duplicates:

分析确定:

  • 97 rows affected受影响-行(a.k.a )。ROW_COUNT())。
  • Records: 2425是由SELECT部件获取的行数。
  • Duplicates: 28ON DUPLICATE KEY UPDATE部件实际更改的行数。

因此:

  • affected-rows - Duplicates * 2是实际插入的行数。
  • Records - affected-rows - Duplicates是重复但未更改的行数(即值被设置为相同值)。

这就引出了一个问题:如何在程序中获得这些数字,Records Duplicates (如果这有助于回答问题,我使用MySQL Connector/J )。

可能对Records:来说,在FOUND_ROWS()上直接在INSERT ... SELECT ... ON DUPLICATE KEY UPDATE之后发布一个INSERT ... SELECT ... ON DUPLICATE KEY UPDATE是一种方法。

我不知道Duplicates:从何而来。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-10 07:20:42

C不像对mysql_affected_rows()那样,以数字的形式直接访问这些值(或计算这些值的底层信息)。

但是,您可以使用mysql_info()访问该消息。

mysql_info() const char *mysql_info(MYSQL *mysql) 描述 检索一个字符串,该字符串提供有关最近执行的语句的信息,但仅用于此处列出的语句。对于其他语句,mysql_info()返回NULL。字符串的格式取决于语句的类型,如下所述。数字只是说明性的;字符串包含适合于语句的值。

  • INSERT INTO ... SELECT ... 字符串格式:Records: 100 Duplicates: 0 Warnings: 0
  • ..。
  • UPDATE 字符串格式:Rows matched: 40 Changed: 40 Warnings: 0

返回值

一个字符串,表示有关最近执行的语句的其他信息。如果该语句没有可用的信息,则为空。

如果需要详细访问这些值,可以/必须解析这些(查询依赖的)字符串。mysql客户端只显示这条消息。

不幸的是,并不是每个api (包括MySQL Connector/J )都实现或中继这个特性,因此这些详细的值在这里似乎无法访问。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52731928

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档