mysql是一种用于执行查询获取结果等通用目的的客户端程序。它可以进行交互式使用,也可以通过读取文件中的查询来批量执行命令。
4.3.1 mysql交互式使用
mysql客户端程序使你能将查询发送到MySQL Server并接收到查询结果。它可以进行交互式使用,也可以通过以批量模式读取文件中的查询命令:
交互模式一般对于日常的使用,一次性查询,或测试查询工作等。
批量模式则对运行已经预先存放于一个文件中的查询有帮助。它对于很难进行手工录入的一系列复杂查询的执行特别方便。在进行无用户干预的计划任务调度时,使用批量模式可以进行自动执行。
MySQL命令如版本查询,在下图中命令在mysql客户端中执行,它也可以作为mysql启动时命令的一部分一起在shell命令窗口中执行:
你可以直接在shell命令行中使用 -e或 --execute项:
除非 -e之后所要执行的命令有多个,否则不需要使用命令终止符。如果有多个命令,你需要使用分号对语句进行分隔。
4.3.2语句分隔符
你可以使用两种终止符中的任意一种来结束一句命令。这两种终止符为【;】和【\g】。它们的作用相同:
【\G】也可用于终止命令查询,但会将结果集中每行的列值以纵向进行显示:
【\G】终止符的纵向显示功能,方便我们对特别长的输出行的阅读。
语句终止符的另一个使用原因在于:mysql允许将单个查询以多行的形式进行输入。这样,就能帮助更容易地完成一个长的复杂查询输入。mysql程序会在将查询发送到服务端进行执行前等待命令终止符的出现。例如:
请注意,当你并没有单个输入行中完成命令语句: mysql会将提示符从mysql>变为 ->来告诉你,它仍然在等待语句的终止。
如果语句结果报错,mysql会显示服务端返回的报错信息:
如果你改主意了,希望取消你现在正在输入的命令,你可以键入【\c】,这样mysql会直接取消当前语句的录入并使你回到mysql> 提示符下:
如果需要退出mysql,你可以使用【\q】,quit或exit命令:
4.3.3 mysql提示符
实际上mysql> 仅仅是mysql程序中你看到的在键入查询时多种提示符中的一个。每种类型的提示符都有不同的含义,mysql在你进行查询键入的时候,会进行提示符的变换以提示相应的命令状态信息。下表中列出了每种提示符的相应含义:
提示符
含义
mysql>
准备接收语句
->
等待新的语句行及终止符(如:【;】或【\G】)
‘>
等待(由单引号括起来的)字符串后的单引号结尾
“>
等待(由双引号括起来的)字符串或标识符后的双引号结尾
`>
等待(由反勾号括起来的)标识符后反勾号结尾
/*>
等待注释符号结尾
其中mysql> 是作为主要提示符。它意味着mysql已经准备好接收你键入新命令了。
如果你在当前命令键入时有误操作,或错误地在命令中加上引号而无结尾,你可以在键入对应引号结尾并使用【\c】来进行取消命令。
如果需要重新定义mysql> 提示符,可以使用prompt命令:
或在提示符中提供更多当前信息:
如果需要永久保留此设置,也可以将其写入配置文件中,以供mysql客户端程序使用:
对于prompt命令,其空格之后紧跟的字符串将成为新的提示符内容,包括之后的空格(配置文件中的空格处理方式不同)。不过如果你需要改回默认,你可以直接使用不带参数的prompt命令或【\R】来进行恢复。
4.3.4在mysql中使用编辑键
mysql支持行内编辑,使你能够通过移动光标进行输入行的编辑。
mysql也支持(类似Unix)的Tab补全功能来简化操作。使用Tab补全功能,你可以键入部分关键词或标示并使用Tab键进行补全(对于表名补全有很用)。
使用mysql编辑按键:
四个方向键:
– 左右方向键用于移动光标向前/向后
– 上下方向键用于在mysql客户端程序中追溯历史命令
mysql客户端具有在通用的Unix下的阅读全文能力:
– Ctrl+A => 调转到光标所在的行头
– Ctrl+E => 调转到光标所在的行尾
– Ctrl+K => 删除光标所在以及之后的输入
– Ctrl+R => 查找之前使用过的命令
如上图:按Ctrl+R后,键入use,会在命令历史记录中调出之前使用过的use sakila命令。
命令历史记录会在会话间进行保存
– 命令历史纪录将持久保存在Linux中
– 保存在对应用户home目录下的.mysql_history文件中
4.3.5 mysql使用脚本文件
当进行交互使用时,mysql会读取键盘输入的查询命令。除此之外,mysql当然也能接收从文件中读取的命令。一个包含有可执行SQL语句的输入文件又被称为“脚本文件”或一个”批文件”。脚本文件中包含了你应该进行交互使用而输入的相同格式的语句。在这里,每个语句必须以一个终止符结束。
对脚本进行执行的其中一种方法是使用mysql的source命令:
mysql> source input_file
mysql会执行文件中的命令并产生输出。
文件必须放置在你正在运行mysql的客户端主机上。位置可以使用绝对路径也可以使用相对路径(相对调用mysql程序的位置)。例如,如果你启动的mysql所在位置为Windows系统的C:/mysql目录,而你的脚本文件my_cmd.sql放在C:/scripts目录中,以下两种source命令都可以告知mysql来进行执行:
mysql> source C:/scripts/my_cmd.sql
mysql> source ../scripts/my_cmd.sql
注意:在Windows中,你应该使用斜杠【/】,因为一些反斜杠被用于转义特定字符(如,【\n】)。
如果脚本在执行时报错,那么mysql会无视文件中之后的内容,跳出执行。为了在报错后,继续执行之后文件中的命令,你需要在调用mysql时使用 --force或 -f项。
脚本文件中也可以使用source命令来执行其它文件,不过请注意请不要造成source循环。如,如果file1包含有source file2命令,则file2就不应该包含有source file1命令
4.3.6 mysql输出格式
默认情况下,mysql会以两种形式产生输出,这取决于你使用交互式模式还是批量模式:
当使用交互式模式调用mysql,mysql会将结果集辅以横线和竖线的表输出格式列示出来。
当你使用批量模式时,查询命令的输出将使用tab制表位来对数据值进行分隔。
为了覆盖默认输出格式,你可以使用以下项:
--batch 或 -B
产生批量模式(tab作为分隔符)输出,即便使用交互模式。
--table 或 -t
产生表输出格式,即便运行于批量模式下。
--html 或 -H
产生HTML格式输出。
--xml 或 -X
产生XML格式输出。
在批量模式下,你可以使用 --raw或 -r项来制止转义字符的使用,如,新行【\n】或回车【\r】。在raw模式下,字符都会被真正的打出来。
4.3.7客户端命令和SQL语句
当你在运行mysql中执行了一个SQL语句,程序会将语句发送到MySQL Server并进行执行,如select, insert, update和delete此类输入。mysql也有很多非SQL语句的命令,如之前的quit和source命令等。其它如status命令,除了显示服务端本身信息外,它还会显示当前连接服务端的信息:
你可以通过help命令来显示mysql中的可用命令。
mysql命令有长命令和短命令两种形式。长命令即为使用完整单词的命令(如source, status或help)。短命令则是斜杠【\】后跟单个字符(如【\.】,【\s】或【\h】)。长命令形式上不分大小写。但短命令形式则是大小写敏感的。
和SQL语句不同的是,mysql命令不能分多行键入。例如,如果你使用source input_file命令来执行文件中的语句,input_file必须和source命令处于同一行中,它不能在下一行被键入。
对于记录下查询和输出,我们可以使用tee命令会将所有屏幕中的数据输出加入到指定的文件中。这对于调试很有用。你可以在命令行中使用 --tee项,或在交互模式下使用tee命令。tee文件在使用后可以使用notee命令来退出tee。再次执行tee命令可重新启动并记录。如果不使用参数,默认会继续记录在之前使用的文件中。注意,tee会在每个语句执行后将查询结果刷入文件,仅在mysql显示之后的提示符之前的时候进行。
4.3.8使用服务端help
mysql程序可以访问服务端的help。这意味着,你可以在MySQL参考手册(MySQL Reference Manual)中查找特定主题。主要访问语法使用help命令来显示帮助系统中的顶层目录contents:
mysql> help contents;
你不需要一步步通过内容列表来对特定主题获取帮助。假如你需要知道如何获得服务器状态信息,但又不记得命令了。你只需要键入help并在之后加上关键词:
mysql> help status;
为了获取特定信息,如:你可以使用help命令并加上show关键字:
mysql> help show;
服务端help要求其相关mysql数据库help表已经被倒入了,默认情况下这些文件已经被倒入了,当然你自己进行的MySQL编译安装除外。
4.3.9使用安全更新项
有时候,可以由于误操作或不谨慎而执行了某些命令导致表中的许多行被修改或返回太多的结果集。使用 --safe-updates项可以帮助避免这些问题。这个命令项对于刚开始使用MySQL的人来说很有用。--safe-updates有以下效果:
update和delete语句仅在where语法中使用键值指定某些记录或具有limit语法后才能允许操作。
除非明确使用了limit语法,否则单表的select语法查询被限制输出不超过1000行。
多表select查询仅在对不超过100万行查询处理的情况下才会允许执行。
使用 --i-am-a-dummy项同义于使用 --safe-updates。