我正在尝试更新一个包含400多行的表。我正在尝试更新整个表格!每行都需要更新为新值。所以,我想在php中做一个循环,它将生成所需的UPDATE语句并逐个将它们发送到数据库。
我觉得数据库会很苛刻,其中一些可能会丢失。我是对的吗?或者这样做可以吗?如果没有,我还能做什么其他方式呢?有没有办法在一个查询中进行一次可以触发的所有更新?
其他想法是,创建一个包含所有UPDATE语句的大型SQL语句。但MySQL是否支持在一个语句中进行多次更新?
提前谢谢。
答案 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