使用where语句批量更新mysql

时间:2016-03-01 15:30:44

标签: mysql sql-update bulk

如何批量更新mysql数据? 如何定义这样的东西:

UPDATE `table` 
WHERE `column1` = somevalues
SET  `column2` = othervalues

有一些像:

VALUES
    ('160009'),
    ('160010'),
    ('160011');

和其他值:

VALUES
    ('val1'),
    ('val2'),
    ('val3');

也许用mysql不可能? 一个PHP脚本?

4 个答案:

答案 0 :(得分:35)

您的案例中最简单的解决方案是使用ON DUPLICATE KEY UPDATE构造。它工作得非常快,并且能够轻松完成工作。

// TEXT("...") works in both ANSI/MBCS and Unicode builds
MessageBox(nullptr, 
           TEXT("Test_text"),    
           TEXT("Message Test"),
           MB_ICONINFORMATION | MB_OKCANCEL);

或使用CASE构建

L"..."

答案 1 :(得分:2)

如果"批量"你拥有的数据是动态的,来自PHP(你毕竟标记了它),然后查询看起来像这样:

INSERT INTO `foo` (id, bar)
VALUES 
    (1, 'pineapple'),
    (2, 'asian pear'),
    (5, 'peach')
ON DUPLICATE KEY UPDATE bar = VALUES(bar);

和PHP从现有数组生成它(假设数组的格式如下:

$array = (
    somevalues_key => othervalues_value
);

)看起来像这样(绝不是最好的(例如,没有地址转义或消毒值),只是一个简单的例子):

$pairs = array();
foreach ($array as $key => $value) {
    $pairs[] = "($key, '$value')";
}

$query = "INSERT INTO `foo` (id, bar) VALUES " . implode(', ', $pairs) . " ON DUPLICATE KEY UPDATE bar = VALUES(bar)";

答案 2 :(得分:0)

如果你有数据格式的数据,那么试试这个

,您的查询就像"UPDATE table WHERE column1 = ? SET column2 = ?"

然后设置如下

foreach($data as $key => $value) {
    $query->bind_param('ss', $key, $value);
    $query->execute();
}
希望它能运作。

来自this的参考。

答案 3 :(得分:0)

您可以使用implode通过where语句批量更新mysql

$requete = $pdo->prepare("update table_name set field = 1 where id in(".implode(', ', $ids).")");
$requete->execute();

$ ids是一个数组