Php 这么多更新查询
我正在尝试更新一个超过400行的表。我正在尝试更新整个表!每一行都需要更新为新值。因此,我考虑在php中执行一个循环,生成所需的UPDATE语句,并将它们逐个发送到数据库 我觉得这会对数据库造成严重影响,其中一些可能会丢失。我说得对吗?或者这样做可以吗?如果没有,我还能用什么方法呢?有没有一种方法可以在一个查询中进行一次更新 另一个想法是,创建一个包含所有UPDATE语句的大型SQL语句。但是MySQL支持在一条语句中进行多次更新吗Php 这么多更新查询,php,mysql,sql,updates,Php,Mysql,Sql,Updates,我正在尝试更新一个超过400行的表。我正在尝试更新整个表!每一行都需要更新为新值。因此,我考虑在php中执行一个循环,生成所需的UPDATE语句,并将它们逐个发送到数据库 我觉得这会对数据库造成严重影响,其中一些可能会丢失。我说得对吗?或者这样做可以吗?如果没有,我还能用什么方法呢?有没有一种方法可以在一个查询中进行一次更新 另一个想法是,创建一个包含所有UPDATE语句的大型SQL语句。但是MySQL支持在一条语句中进行多次更新吗 提前谢谢。一张只有400行的桌子算小了。至于性能:最好只发送一
提前谢谢。一张只有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
SETcol
=“val”WHERE条件;可以有多个更新—对于N语句更新,请确保使用适当的事务。如果多个更新确实存在问题(在不同的情况下可能会有),那么还有其他解决方案,但请保持简单。“一个有400多行的表。”-哇!为什么不在一个语句中更新?更新tableName
SETcol
=“val”WHERE条件;这才是我真正想要的。非常感谢^^。这正是我想要的。非常感谢^^。这是我的想法,但我担心绳子太长,无法处理。但是+1对于事务ID,我很喜欢,谢谢你^^。如果你想看看ppl对php/mysql中查询的最大长度是怎么说的,这就是我的想法,但我担心字符串太长,无法处理。但是对于事务ID+1,我喜欢它,谢谢你^^。如果你想了解ppl对php/mysql中查询的最大长度的看法,请看这个