4.5.1.6 mysql提示
本节介绍一些可以帮助您更有效地使用mysql的技术 。
mysql支持输入行编辑,使您可以修改当前输入行或调用以前的输入行。例如, 左箭头 键和右箭头键在当前输入行内水平移动,并且 向上箭头键和向下箭头键在上一组输入行中上下移动。 Backspace在光标前删除字符,并在光标位置输入新字符。要输入该行,请按 Enter键。
在Windows上,编辑键序列与控制台窗口中命令编辑支持的相同。在Unix上,键序列取决于用于构建mysql的输入库 (例如, libedit
或readline
库)。
这些libedit
和 readline
库的文档可在线获取。要更改给定输入库允许的键序列集,请在库启动文件中定义键绑定。这是您的主目录中的文件:.editrc
for libedit
和 .inputrc
for readline
。
例如,在中libedit
, Control + W会删除当前光标位置前的所有内容,而Control + U会删除整行。In readline
, Control + W删除光标前的单词,Control + U删除当前光标位置前的所有内容。如果使用mysql构建libedit
,那么喜欢readline
这两个键行为的用户 可以在.editrc
文件中放入以下行(如果需要,可以创建该文件):
bind "^W" ed-delete-prev-word
bind "^U" vi-kill-line-prev
要查看当前的一组键绑定,请暂时放置仅bind
在最后显示的行 .editrc
。mysql会在启动时显示绑定。
Windows提供基于UTF-16LE的API以读取和写入控制台; Windows 的mysql客户端可以使用这些API。Windows安装程序在名为的MySQL菜单中创建一个项目MySQL command line client - Unicode
。该项调用 mysql客户端,其属性设置为使用Unicode通过控制台与MySQL服务器进行通信。
要手动利用此支持,请在使用兼容Unicode字体的控制台中运行 mysql,并将默认字符集设置为支持与服务器通信的Unicode字符集:
打开一个控制台窗口。
转到控制台窗口属性,选择字体选项卡,并选择Lucida控制台或其他兼容的Unicode字体。这是必要的,因为控制台窗口默认使用不适用于Unicode的DOS光栅字体启动。
用 (或)选项 执行mysql.exe。该选项是必需的,因为不支持作为连接字符集。
--default-character-set=utf8
utf8mb4
utf16le
通过这些更改,mysql将使用Windows API使用UTF-16LE与控制台进行通信,并使用UTF-8与服务器进行通信。(之前提到的菜单项设置了刚描述的字体和字符集。)
为了避免每次运行mysql时执行这些步骤 ,可以创建一个调用mysql.exe的快捷方式。快捷方式应该将控制台字体设置为Lucida控制台或其他兼容的Unicode字体,并将--default-character-set=utf8
(或 utf8mb4
)选项传递 给 mysql.exe。
或者,创建一个仅设置控制台字体的快捷方式,并在[mysql]
您的my.ini
文件组中 设置字符集 :
[mysql]
default-character-set=utf8
垂直显示时,某些查询结果更易读,而不是通常的水平表格格式。通过用\ G代替分号来终止查询,可以垂直显示查询。例如,包含换行符的较长文本值通常更容易用垂直输出读取:
mysql> SELECT * FROM mails WHERE LENGTH(txt) < 300 LIMIT 300,1\G
*************************** 1. row ***************************
msg_nro: 3068
date: 2000-03-01 23:29:50
time_zone: +0200
mail_from: Monty
reply: monty@no.spam.com
mail_to: "Thimble Smith" <tim@no.spam.com>
sbj: UTF-8
txt: >>>>> "Thimble" == Thimble Smith writes:
Thimble> Hi. I think this is a good idea. Is anyone familiar
Thimble> with UTF-8 or Unicode? Otherwise, I'll put this on my
Thimble> TODO list and see what happens.
Yes, please do that.
Regards,
Monty
file: inbox-jani-1
hash: 190402944
1 row in set (0.09 sec)
对于初学者来说,一个有用的启动选项是 --safe-updates
(或者 --i-am-a-dummy
,具有相同的效果)。这对于您可能发表声明但忘记该条款的情况很有帮助。通常,这样的语句会删除表中的所有行。使用 ,您只能通过指定标识它们的键值来删除行。这有助于预防事故。 DELETE FROM
tbl_name
WHERE
--safe-updates
当您使用该--safe-updates
选项时,mysql在连接到MySQL服务器时发出以下语句:
SET sql_safe_updates=1, sql_select_limit=1000, max_join_size=1000000;
请参见第5.1.5节“服务器系统变量”。
该 SET
声明具有以下效果:
要指定不同于1,000和1,000,000的限制,可以使用--select_limit
和 --max_join_size
选项覆盖默认值 :
shell> mysql --safe-updates --select_limit=500 --max_join_size=10000
如果mysql客户端在发送语句时失去与服务器的连接,它立即自动尝试重新连接一次到服务器并再次发送语句。但是,即使mysql 成功重新连接,您的第一个连接也会结束,您以前的会话对象和设置都将丢失:临时表,自动提交模式以及用户定义和会话变量。此外,任何当前事务回滚。这种行为对您来说可能很危险,如下例中服务器关闭并在第一条和第二条语句之间重新启动而您不知道它:
mysql> SET @a=1;
Query OK, 0 rows affected (0.05 sec)
mysql> INSERT INTO t VALUES(@a);
ERROR 2006: MySQL server has gone away
No connection. Trying to reconnect...
Connection id: 1
Current database: test
Query OK, 1 row affected (1.30 sec)
mysql> SELECT * FROM t;
+------+
| a |
+------+
| NULL |
+------+
1 row in set (0.05 sec)
该@a
用户变量已经失去了与连接,重新连接后,它是不确定的。如果在连接丢失的情况下让mysql终止时出现错误很重要,那么可以使用该 选项启动 mysql客户端 --skip-reconnect
。本文由学什么技术好提供翻译
有关重新连接时自动重新连接及其对状态信息的影响的更多信息,请参见 第28.7.24节“C API自动重新连接控制”。