代码之家  ›  专栏  ›  技术社区  ›  Will

选择受更新影响的行

  •  6
  • Will  · 技术社区  · 15 年前

    如何获得受SQL影响的确切行 UPDATE MySQL中的语句?

    WHERE 任何时候,每个客户机都需要在另一个系统中为它们影响的每一行执行某些操作,因此获取受影响项的列表必须是准确的,并且不易受竞争条件的影响。

    UPDATE ... OUTPUT UPDATED.id WHERE ... SQL Server

    你怎么能做到这一点 更新 SELECT 在MySQL中?

    (我看到了一些建议 选择 IN 合同条款 . 但另一个客户端可能运行相同的 选择 并在第一个客户机排队时检索相同的行 等等?)

    2 回复  |  直到 15 年前
        1
  •  2
  •   Naktibalda    15 年前

    使用表锁定或事务(如果存储引擎支持)来防止争用情况。

    LOCK TABLES tablename;
    SELECT * FROM tablename WHERE x.
    do something else
    UPDATE tablename SET y WHERE x.
    UNLOCK TABLES
    
        2
  •  1
  •   Community CDub    8 年前

    这是我以前用过的,还有一个别人用过的例子 here on Stackoverflow

    UPDATE my_table SET
        id = (SELECT @id := id),
        <column> = 'value'        
        WHERE <condition>;
    

    @id 将包含更新行的ID,或 NULL 如果没有更新行。这只适用于单行更新。