`
fantaxy025025
  • 浏览: 1278938 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类

Mysql_AddOrUpdate_A better way to add or update MySQL rows

阅读更多

有时候,这个东西能省略不少事情~

 

INSERT INTO table (column_a, column_b, column_c) VALUES (1, 2, 3)
    ON DUPLICATE KEY UPDATE column_c = column_c + 1;

 

A better way to add or update MySQL rows

Recently, we needed to iterate over a fairly large data set (on the order of millions) and do the ever-common If it’s not in the database, put it in.  If it’s already there, just update some fields. It’s a pattern that is very common for things like log files (where, for example, only a timestamp needs to be updated in some cases).

The obvious way of doing a SELECT, followed by either an UPDATE or an INSERT is too slow for even moderately-large datasets.  The better way to accomplish this is to use MySQL’s ON DUPLICATE KEY UPDATE directive.  By simply creating a unique key on the fields that should be different per-row, this syntax provides two specific benefits:

  • Allows batch (read: transaction) queries for large data
  • Increases performance overall versus making two separate queries

These benefits are especially helpful when your dataset is too large to fit into memory.  The obvious drawback to this method, however, is that it may put additional load on your database server.  Like anything else, it’s worth testing out your individual situation but, for us, ON DUPLICATE KEY UPDATE was the way to go.

 

 

分享到:
评论

相关推荐

    MySQL_C_API.rar_API_mysql_doc_mysql api_mysql c语言

    4. **结果集操作**:一旦有了查询结果,`mysql_num_rows()`可获取行数,`mysql_fetch_row()`和`mysql_fetch_assoc()`用于遍历结果集,获取每一行数据。`mysql_free_result()`用于释放结果内存。 5. **预处理语句**...

    MYSQL_C_API.rar_MYSQL_mysql c++

    MySQL C API是MySQL数据库系统提供的一种编程接口,用于在C或C++程序中与MySQL服务器进行交互。这个“MYSQL_C_API.rar_MYSQL_mysql c++”压缩包文件包含了一个详细注释版的MySQL C API文档,名为“MYSQL_C_API详解....

    mysql SELECT FOUND_ROWS()与COUNT()用法区别1

    在MySQL数据库中,`SELECT FOUND_ROWS()` 和 `COUNT(*)` 都是用来获取数据表中记录数量的方法,但它们之间存在一些关键的区别。了解这些差异对于优化查询性能和满足特定需求至关重要。 首先,`COUNT(*)` 是一个标准...

    CSQL.rar_ CSQL_CSQL_MYSQL改_linux c mysql_linux mysql增删

    通过`mysql_fetch_row()`可以逐行获取结果,`mysql_num_rows()`则返回结果集中行的数量。 7. **错误处理**:在与MySQL交互时,需要检查每个函数的返回值以处理可能出现的错误。`mysql_error()`函数可以获取最近一次...

    php访问MYSQL数据库封装类.zip

    MYSQL 数据库访问封装类  MYSQL 数据访问方式,php4支持以mysql_开头的过程访问方式,php5开始支持以mysqli_开头的...4,处理返回的数据 mysql_fetch_array mysql_num_rows mysql_fetch_assoc mysql_fetch_row etc 

    mysql_c接口大全.doc

    6. `mysql_affected_rows()`: 返回最后执行的UPDATE、DELETE或INSERT查询所影响的行数。 7. `mysql_error()` 和 `mysql_errno()`: 分别用于获取最近一次操作的错误信息和错误代码。 8. `mysql_fetch_row()`: 从...

    MYSQL5.1 CHM版中文帮助文档.zip_MYSQL_msql 5.1 API文档

    error()`和`mysql_errno()`)、事务控制函数(如`mysql_commit()`和`mysql_rollback()`)、预处理语句函数(用于提高性能和安全性)以及元数据查询函数(如`mysql_field_count()`和`mysql_num_rows()`)等。...

    mysql.rar_linux mysql_linux mysql_mysql linux

    在Linux系统中,MySQL是一种广泛使用的开源关系型数据库管理系统,其稳定性和性能备受开发者青睐。本文将深入探讨如何在Linux环境下连接MySQL数据库,并提供相关的示例代码。 首先,确保你的Linux系统已经安装了...

    MySQL_API中文手册

    - `mysql_num_rows()`返回查询结果中的行数,`mysql_field_count()`给出查询中的列数。 - 结果集中的每一行可以通过`mysql_fetch_assoc()`或`mysql_fetch_array()`获取,它们将结果转换为关联数组或数字索引数组。...

    mysql_gui_tools_5.0

    - 如果需要恢复数据库,可以运行`restore_structure_example_database.sql`和`restore_rows_example_database.sql`脚本。 通过MySQL GUI Tools 5.0 R17,用户可以更加便捷地进行数据库管理和开发,提高工作效率,...

    MYSQL_C_API详解.pdf

    - `mysql_query()`可以用于执行INSERT、UPDATE、DELETE等SQL语句,并使用`mysql_affected_rows()`来获取影响的行数。 8. **MySQL C API的高级特性**: - `mysql_list_fields()`:列出指定表的字段信息,可以理解...

    MySql_C 接口集合

    ### MySQL C 接口集合详解 #### 1. `mysql_affected_rows()` - **功能**:返回由最近的更新、删除或插入操作所影响的行数。 - **使用场景**:在执行了数据更改操作后,可用于确认操作是否成功及影响范围。 #### 2....

    net-mysql.rar_.NET MYSQL_MYSQL_c# mysql_list mysql_mysql示例

    rows.Add(row); } // 关闭数据库连接和数据读取器 reader.Close(); connection.Close(); // 使用List进行进一步的操作 foreach (TableRow row in rows) { Console.WriteLine($"Column1: {row.Column1}, Column2:...

    MySql_API文档

    `mysql_num_rows()`函数则用来获取结果集中的行数。 4. **错误处理**:在使用MySQL API时,可能会遇到错误。`mysql_error()`函数可以获取最近一次操作的错误信息,而`mysql_errno()`返回对应的错误代码。这些信息...

    php操作mysql详解

    mysql_affected_rows — 取得前一次 MySQL 操作所影响的记录行数 mysql_client_encoding — 返回字符集的名称 mysql_close — 关闭 MySQL 连接 mysql_connect — 打开一个到 MySQL 服务器的连接 mysql_create_db — ...

    mysql_num_rows VS COUNT 效率问题分析

    在SQL查询中,统计表中的记录数是常见的需求,MySQL提供了两种主要的方法:`mysql_num_rows` 和 `COUNT(*)`。然而,这两种方法在效率上有显著的差异,尤其是在处理大量数据时。 `mysql_num_rows` 是MySQL的一个函数...

    PHP_MYSQL_study.rar_PHP + mysql_php mysql

    例如,`mysqli_query()`或`PDO::query()`执行查询,`mysqli_fetch_assoc()`或`PDO::fetch()`获取结果行,`mysqli_num_rows()`或`PDO::rowCount()`计算返回的行数。 5. PHP与MySQL事务处理 对于需要确保数据一致性...

    mysql_driver

    它提供了一个接口,让程序员能够通过编写代码与MySQL服务器进行通信,执行SQL查询,管理和处理数据库数据。本文将深入探讨MySQL驱动的相关知识点,包括其工作原理、常见类型、安装与配置以及使用示例。 一、MySQL...

Global site tag (gtag.js) - Google Analytics