Php 这么多更新查询

Php 这么多更新查询,php,mysql,sql,updates,Php,Mysql,Sql,Updates,我正在尝试更新一个超过400行的表。我正在尝试更新整个表!每一行都需要更新为新值。因此,我考虑在php中执行一个循环,生成所需的UPDATE语句,并将它们逐个发送到数据库 我觉得这会对数据库造成严重影响,其中一些可能会丢失。我说得对吗?或者这样做可以吗?如果没有,我还能用什么方法呢?有没有一种方法可以在一个查询中进行一次更新 另一个想法是,创建一个包含所有UPDATE语句的大型SQL语句。但是MySQL支持在一条语句中进行多次更新吗 提前谢谢。一张只有400行的桌子算小了。至于性能:最好只发送一

我正在尝试更新一个超过400行的表。我正在尝试更新整个表!每一行都需要更新为新值。因此,我考虑在php中执行一个循环,生成所需的UPDATE语句,并将它们逐个发送到数据库

我觉得这会对数据库造成严重影响,其中一些可能会丢失。我说得对吗?或者这样做可以吗?如果没有,我还能用什么方法呢?有没有一种方法可以在一个查询中进行一次更新

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


提前谢谢。

一张只有400行的桌子算小了。至于性能:最好只发送一条update语句,而不是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;

只有400行的表可以被视为小表。至于性能:最好只发送一条update语句,而不是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;

这对数据库来说并不难

如果你想,你可以像这样链接你的更新语句

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   
}    

有关更多信息,请查看此问题,这对数据库来说并不难

如果你想,你可以像这样链接你的更新语句

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   
}    

有关更多信息,请查看此问题

可以有多个更新-对于N语句更新,请确保使用适当的事务。如果多个更新确实存在问题(在不同的情况下可能会有),那么还有其他解决方案,但请保持简单。“一个有400多行的表。”-哇!为什么不在一个语句中更新?更新
tableName
SET
col
=“val”WHERE条件;可以有多个更新—对于N语句更新,请确保使用适当的事务。如果多个更新确实存在问题(在不同的情况下可能会有),那么还有其他解决方案,但请保持简单。“一个有400多行的表。”-哇!为什么不在一个语句中更新?更新
tableName
SET
col
=“val”WHERE条件;这才是我真正想要的。非常感谢^^。这正是我想要的。非常感谢^^。这是我的想法,但我担心绳子太长,无法处理。但是+1对于事务ID,我很喜欢,谢谢你^^。如果你想看看ppl对php/mysql中查询的最大长度是怎么说的,这就是我的想法,但我担心字符串太长,无法处理。但是对于事务ID+1,我喜欢它,谢谢你^^。如果你想了解ppl对php/mysql中查询的最大长度的看法,请看这个