use*_*384 28 mysql bulk sql-update
如何批量更新mysql数据?如何定义这样的东西:
UPDATE `table`
WHERE `column1` = somevalues
SET `column2` = othervalues
Run Code Online (Sandbox Code Playgroud)
与某些值如下:
VALUES
('160009'),
('160010'),
('160011');
Run Code Online (Sandbox Code Playgroud)
和其他值:
VALUES
('val1'),
('val2'),
('val3');
Run Code Online (Sandbox Code Playgroud)
也许用mysql不可能?一个PHP脚本?
Far*_*ide 47
在您的情况下,最简单的解决方案是使用ON DUPLICATE KEY UPDATE
构造.它的工作速度非常快,并且可以轻松完成工作.
INSERT into `table` (id, fruit)
VALUES (1, 'apple'), (2, 'orange'), (3, 'peach')
ON DUPLICATE KEY UPDATE fruit = VALUES(fruit);
Run Code Online (Sandbox Code Playgroud)
或使用CASE
建筑
UPDATE table
SET column2 = (CASE column1 WHEN 1 THEN 'val1'
WHEN 2 THEN 'val2'
WHEN 3 THEN 'val3'
END)
WHERE column1 IN(1, 2 ,3);
Run Code Online (Sandbox Code Playgroud)
如果您拥有的“批量”数据是动态的并且来自 PHP(毕竟您确实标记了它),那么查询将如下所示:
INSERT INTO `foo` (id, bar)
VALUES
(1, 'pineapple'),
(2, 'asian pear'),
(5, 'peach')
ON DUPLICATE KEY UPDATE bar = VALUES(bar);
Run Code Online (Sandbox Code Playgroud)
以及从现有数组生成它的 PHP(假设数组的格式如下:
$array = (
somevalues_key => othervalues_value
);
Run Code Online (Sandbox Code Playgroud)
) 看起来像这样(绝不是最好的(例如,不解决转义或清理值),只是一个简单的例子):
$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)";
Run Code Online (Sandbox Code Playgroud)