我通过命令行和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个。
答案 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
更新值。
注意:这里我假设您已经订购了需要更新的记录。