此批命令文件可通过在DOS 控制台提示符下键入samp_db 来执行,也可以双击它的Windows 图标来执行。如果访问多个数据库或连接到多个主机,则可以定义几个别名或脚本,每一个都用不同的选项调用mysql。 1.5.2 以较少的键入发布查询 mysql是一个与数据库进行交互的极为有用的程序,但是其界面最适合于简短的、单行的查询。当然, mysql自身并不关心某个查询是否分成多行,但是长的查询很不好键入。输入一条查询也不是很有趣的事,即使是一条较短的查询也是如此,除非发现有错误才愿意重新键入它。 有几种可用来避免不必要的键入或重新键入的技巧: ■ 利用mysql的输入行编辑功能。 ■ 利用拷贝和粘贴。 ■ 以批方式运行mysql。 ■ 利用现有数据来创建新记录以避免键入INSERT 语句。 1. 利用mysql的输入行编辑器 mysql具有内建的GNU Readline 库,允许对输入行进行编辑。可以对当前录入的行进行处理,或调出以前输入的行并重新执行它们(原样执行或做进一步的修改后执行)。在录入一行并发现错误时,这是非常方便的;您可以在按Enter 键前,在行内退格并进行修正。如果录入了一个有错的查询,那么可以调用该查询并对其进行编辑以解决问题,然后再重新提交它。(如果您在一行上键入了整个查询,这是最容易的方法。)表1-4 中列出了一些非常有用的编辑序列,除了此表中给出的以外,还有许多输入编辑命令。利用因特网搜索引擎,应该能够找到R e a d l i n e手册的联机版本。此手册也包含在Readline 分发包中,可在http://www.gnu.org/ 的GN U Web 站点得到。
下面的例子描述了输入编辑的一个简单的使用。假定用mysql输入了下列查询:
如果在按Enter 前,已经注意到将“ p r e s i d e n t”错拼成了“ per s i d e n t”,则可按左箭头或Ctrl-B 多次移动光标到“s”的左边。然后按Delete 两次删除“er”,键入“r e”改正错误,并按Enter 发布此查询。如果没注意到错拼就按了E n ter,也不会有问题。在mysql显示了错误消息后,按上箭头或Ctrl-P 调出该行,然后对其进行编辑。 输入行编辑在mysql的Windows 版中不起作用,但是可从MySQLWeb 站点取得免费的cygwin_32 客户机分发包。在该分发包中的mysqlc 程序与mysql一样,但它支持输入行编辑命令。 2. 利用拷贝和粘贴发布查询 如果是在窗口环境下工作,可将认为有用的查询文本保存在一个文件中并利用拷贝和粘贴操作很容易地发布这些命令。其工作过程如下: 1) 在Te l n e t窗口或DOS 控制窗口中激活mysql。 2) 在一个文档窗口打开包含查询的文件。(如笔者在Mac OS 下使用B B E d i t,在UNIX中使用X Window System 下的xterm 窗口中的v i。) 3) 为了执行存放在文件中的某个查询,选择并拷贝它。然后切换到Telnet 窗口或DOS 控制台,并将该查询粘贴到mysql。这个过程写起来似乎有点令人讨厌,但它是一个快速录入查询的很容易的方法,实际使用时不用键入查询。这个方法也允许在文档窗口中对查询进行编辑,而且它允许拷贝和粘贴现有查询来构造一个新的查询。例如,如果您经常从某个特定的表中选择行,但是喜欢查看以不同方式存放的输出结果,则可以在文档窗口中保存一个不同的ORDER BY 子句的列表,然后为任意的特定查询拷贝和粘贴想使用的那个子句。也可按其他方向拷贝和粘贴(从Telnet 到查询文件)。在mysql中录入行时,它们被保存在您的主目录中的名为.mysql_history 的文件中。如果您手工录入了一个希望保存起来今后使用的查询,可退出mysql,在某个编辑器中打开. mysql_ h i s t o r y,然后从.mysql_history 拷贝和粘贴此查询到您的查询文件。 3. 以批方式运行mysql不一定必须交互式地运行mysql。mysql能够以非交互式(批)方式从某个文件中读取输入。这对于定期运行的查询是很有用的,因为您一定不希望每次运行此查询时都要重新键入它。只要一次性地将其放入一个文件,然后让mysql在需要时执行该文件的内容即可。假定有一个查询查找member 表的interests 列,以找出那些对美国历史的某个方面感兴趣的历史同盟会员。如查找对大萧条期有兴趣的会员,可编写此查询如下(注意结尾处有一个分号,从而mysql能够知道查询语句在何处结束):
为了使用此查询来找出对Thomas Jefferson 感兴趣的会员,可以编辑此查询文件将depression 更改为Je fferson 并再次运行mysql。只要不很经常使用此查询,它工作得很好。如果经常使用,则需要更好的方法。使用此查询更为灵活的一种方法是将其放入一个外壳程序脚本中,此脚本从脚本命令行取一个参数并利用它来更改查询的文本。这样确定查询的参数,使得能够在运行脚本时指定令人感兴趣的关键字。为了了解这如何起作用,按如下编写一个较小的外壳程序脚本i n ter e s t s . s h:
其中第二行保证在命令行上有一个关键字;它显示一条简短的消息,或者退出。在< < Q U E RY_INPUT 和最后的Q U E RY_INPUT 之间的所有内容成为mysql的输入。在查询文本中,外壳程序用来自命令行的关键字替换$ 1。(在外壳程序脚本中, $ 1、$ 2 . . .为命令参数。)这使相应的查询反映了执行此脚本时在命令行上指定的关键字。在能够运行此脚本前,必须使其可执行: