这么多更新查询

时间:2014-01-22 07:51:27

标签: php mysql sql updates

我正在尝试更新一个包含400多行的表。我正在尝试更新整个表格!每行都需要更新为新值。所以,我想在php中做一个循环,它将生成所需的UPDATE语句并逐个将它们发送到数据库。

我觉得数据库会很苛刻,其中一些可能会丢失。我是对的吗?或者这样做可以吗?如果没有,我还能做什么其他方式呢?有没有办法在一个查询中进行一次可以触发的所有更新?

其他想法是,创建一个包含所有UPDATE语句的大型SQL语句。但MySQL是否支持在一个语句中进行多次更新?

提前谢谢。

2 个答案:

答案 0 :(得分:3)

只有400行的表可以被认为是小的。至于性能:最好只发送一个更新语句而不是400.这不是人们所说的多重更新,因为它只影响一个表。所以没问题。但是,根据您的要求,您的陈述可能会变得非常大。

示例1:更新所有记录,使col1与之前的记录相比加倍:

update mytable
set col1 = col1 * 2;

示例2:更新具有不同值的所有记录:

update mytable
set col1 = 
  case
    when id = 1 then col1 * 2
    when id = 2 then col1 * 3
    when id = 3 then col1 + 18
    when id = 4 then 100
    else null
  end;

答案 1 :(得分:1)

数据库并不难。

如果您愿意,可以像这样链接更新语句

mysql_query("update myTable set col1 = 'Row1Val1', col2 = 'Row1Val2' where id = Row1Id;
             update myTable set col1 = 'Row2Val1', col2 = 'Row2Val2' where id = Row2Id;");

但是你应该总是把它包装在一个交易中

try {
    $conn->autocommit(FALSE);//starts a transaction
    //this is where you would have a loop or all the queries as one string
    $conn->query($query);
    $conn->commit();
    $conn->autocommit(TRUE); 
}
catch ( Exception $e ) {
    $conn->rollback(); 
    $conn->autocommit(TRUE); //end transaction   
}    

有关详细信息,请查看此问题PHP + MySQL transactions examples