MySQL Update一次设置多行

时间:2017-08-22 09:23:56

标签: mysql

我通过命令行和UPDATE database.table SET column = REPLACE (column, item1, item2);反复使用MySQL,其中每个查询包含" item1,item2"的不同数据。将有大约20个不同的查询,我将在一些测试和其他工作中使用相同的精确集至少3次,我想知道是否有一个查询我可以使用,即如何将这20个版本合并为一个为了节省时间?

例如,以下是我运行的单独查询,我想知道是否可以将它们合并到一个查询中。

mysql> update quiz_node_results set nid = replace (nid, 184461, 5784);
Query OK, 2057 rows affected (0.22 sec)
Rows matched: 33650  Changed: 2057  Warnings: 0

mysql> update quiz_node_results set nid = replace (nid, 184457, 5785);
Query OK, 2891 rows affected (0.17 sec)
Rows matched: 33650  Changed: 2891  Warnings: 0

mysql> update quiz_node_results set nid = replace (nid, 184462, 5786);
Query OK, 2189 rows affected (0.31 sec)
Rows matched: 33650  Changed: 2189  Warnings: 0

只想象共有20个而不仅仅是这3个。

2 个答案:

答案 0 :(得分:0)

我不完全确定我是否理解了你想要做的事情,但你可以将这组语句写入纯文本文件并将该文本文件提供给MySQL。

文本文件(假设它的名字是test.sql):

update quiz_node_results set nid = replace (nid, 184461, 5784);
update quiz_node_results set nid = replace (nid, 184457, 5785);
...

当然,在文本文件中,你必须添加“prologue”命令(比如选择正确的数据库和其他东西来正确初始化(如果你需要的话))。

然后,在命令行(不在MySQL客户端,但在Linux / Windows命令行上):

mysql -p < test.sql

如果我明白你想做什么,请告诉我......

答案 1 :(得分:0)

drop procedure doiterate;
DELIMITER $$
CREATE PROCEDURE doiterate(p1 INT)
BEGIN
DECLARE VAR_ITEM1 INT DEFAULT 184457;
DECLARE VAR_ITEM2 INT DEFAULT 5784;
  label1: LOOP
    SET p1 = p1 + 1;
    IF p1 < 20 THEN 
        update quiz_node_results set nid = replace (nid, VAR_ITEM1, VAR_ITEM2);
        SET VAR_ITEM1 := VAR_ITEM1+1;
        SET VAR_ITEM2 := VAR_ITEM2+1;
        ITERATE label1; 
    END IF;
    LEAVE label1;
  END LOOP label1;
END;

您可以简单地创建简单的过程,该过程迭代20次并使用UPDATE QUERY更新值。

注意:这里我假设您已经订购了需要更新的记录。