MySQL多次更新查询与一次插入...重复密钥更新查询

时间:2014-11-03 22:51:31

标签: mysql

我需要更新数百到数千行。我想知道以下哪个选项更好:

  1. 发送多个(数百到数千)个“更新”查询
  2. 发送一个(大)“INSERT INTO ... ON DUPLICATE KEY UPDATE”查询
  3. 更多信息:

    1. 表格是InnoDB。
    2. 这些行都存在(重复)。此操作中不会插入新行。
    3. 将涉及约4-10列。
    4. 只涉及这一张表。
    5. 我正在使用PHP来执行查询。
    6. 插入应该更快,因为我可以将多个行批处理到一个查询中,但这是一个读取繁重的表,我担心锁定。插入查询会导致比多次更新查询更多的锁定问题吗?

      由于

1 个答案:

答案 0 :(得分:0)

对一个或多个表执行多个操作时应使用事务,以允许您将数据库返回到一致状态,以防其中一个操作出现错误...

优势

我们可以说以下交易的优势 维持

  • 数据库完整性
  • 原子
  • 耐久性
  • 稠度

交易很有用

请参阅此(简单)示例:

// Set autocommit to off
mysqli_autocommit($con,FALSE);

// Update values 
mysqli_query($con,"UPDATE ...");
mysqli_query($con,"UPDATE ...");
// or do it with prepared statements and run bind_params(...) and execute() in a loop (anyway the better solution // however your situation is


// Commit transaction
mysqli_commit($con);

// Close connection
mysqli_close($con);

请参阅: http://dev.mysql.com/doc/refman/5.0/en/commit.html http://dev.mysql.com/doc/refman/5.6/en/innodb-implicit-commit.html

<强>旁注:

如果您想在没有交易的情况下进行此操作,更新将更快(与插入...相比)