我正在使用不完整的 MySQL 数据库,从外部参考添加重复的手动更新。它进展缓慢,我希望能够简化到目前为止我已经使用了数十次的 SELECT。我前面还有几千个这样的东西。
我已经看到了创建过程的建议,但由于我试图“别名”部分查询,所以我可能问了错误的问题。
我想浓缩一下:
SELECT book, fulltitle, author, num, lastread, category FROM books
...类似这样的事情:
sBk
所以我输入
sBk WHERE book="success";
然后 MySQL 执行:
SELECT book, fulltitle, author, num, lastread, category FROM books WHERE book="success";
在我的数据中,大多数作者都是未定义的——我的任务是解决这个问题。所以我就在我的参考资料中查找该作者的书籍,然后更新记录。
有些书的名字是可以预见的,例如john1、john2、john3...其他则不是,例如jrs2、smithj9、fourteen1、AllYourBase 等。因此,命令通常如下所示:
SELECT book, fulltitle, author, num, lastread, group FROM books WHERE book like \
"artp1%" OR book LIKE "aod%" OR book LIKE "fatal%" OR book LIKE "outside%" OR \
book LIKE "geo-cache%" OR book LIKE "frostbite" OR book LIKE "quickb3%" OR book \
LIKE "instantcof%" OR book = "sevenmile" OR book = "uberfast";
所以我点击向上箭头,删除第一部分,然后输入
author=
得到这个:
UPDATE books SET author="John Smith" WHERE book LIKE (everything above)";
查找和书籍/作者关联是手动的,我无法更改它。但是,一旦我得到与所有正确书籍匹配的 SELECT 语句,就必须有一种更智能的方法来执行这些数据更新。
books
表有几十列,或者我只是select *
。
我可以从之前的选择中复制/粘贴,但我用鼠标很马虎,使它像按删除键一样慢。
我尝试创建一个过程,但我无法让它接受部分命令 - 并且错误不是很具有描述性 - 有没有办法纠正我在这里所做的事情?
CREATE PROCEDURE sBk() BEGIN SELECT book, fulltitle, author, num, lastread, category from books END;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that \
corresponds to your MySQL server version for the right syntax to use near '' at line 1
匹配一本书很简单:点击上一个 UPDATE 命令的向上箭头,编辑,继续。然而,许多命令的长度和复杂性几乎消除了简单 [UpArrow] 相对于上一条语句的优势。
语法错误的原因是您没有设置
DELIMITER
,并且您的过程包含 BEGIN...END
块。有关详细信息,请阅读 https://dev.mysql.com/doc/refman/8.0/en/stored-programs-defining.html。
定义存储过程后,您可以这样调用它:
mysql> CALL sBk();
但这是你可以调用它的唯一方法。不能将 WHERE 子句添加到 CALL 语句。它不是查询的别名。
您可以考虑使用 VIEW 而不是过程。
对于使用向上箭头编辑上一条语句的困难,您可能想在 mysql 客户端中使用
edit
或 \e
命令,而不是向上箭头。此命令打开一个文本编辑器,例如 vi
(或任何您的 EDITOR
或 VISUAL
环境变量名称)。这使您可以更好地控制如何编辑 SQL 语句。