10、MySQL 8.0参考手册 4.5.1.6 mysql提示

本文介绍了MySQL的一些高级使用技巧,包括输入行编辑、垂直显示查询结果、使用--safe-updates选项提高安全性、禁用自动重新连接等功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

4.5.1.6 mysql提示

本节介绍一些可以帮助您更有效地使用mysql的技术 

4.5.1.6.1输入行编辑

mysql支持输入行编辑,使您可以修改当前输入行或调用以前的输入行。例如, 箭头 键右箭头键在当前输入行内水平移动,并且 向上箭头向下箭头键在上一组输入行中上下移动。 Backspace在光标前删除字符,并在光标位置输入新字符。要输入该行,请按 Enter键

在Windows上,编辑键序列与控制台窗口中命令编辑支持的相同。在Unix上,键序列取决于用于构建mysql的输入库 (例如, libeditreadline 库)。

这些libedit和 readline库的文档可在线获取。要更改给定输入库允许的键序列集,请在库启动文件中定义键绑定。这是您的主目录中的文件:.editrc for libedit和 .inputrcfor 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在最后显示的行 .editrcmysql会在启动时显示绑定。

4.5.1.6.2 Windows上的Unicode支持

Windows提供基于UTF-16LE的API以读取和写入控制台; Windows mysql客户端可以使用这些API。Windows安装程序在名为的MySQL菜单中创建一个项目MySQL command line client - Unicode该项调用 mysql客户端,其属性设置为使用Unicode通过控制台与MySQL服务器进行通信。

要手动利用此支持,请在使用兼容Unicode字体的控制台中运行 mysql,并将默认字符集设置为支持与服务器通信的Unicode字符集:

  1. 打开一个控制台窗口。

  2. 转到控制台窗口属性,选择字体选项卡,并选择Lucida控制台或其他兼容的Unicode字体。这是必要的,因为控制台窗口默认使用不适用于Unicode的DOS光栅字体启动。

  3. 用 (或)选项 执行mysql.exe该选项是必需的,因为不支持作为连接字符集。 --default-character-set=utf8utf8mb4utf16le

通过这些更改,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
4.5.1.6.3垂直显示查询结果

垂直显示时,某些查询结果更易读,而不是通常的水平表格格式。通过用\ 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)
4.5.1.6.4使用--safe-updates选项

对于初学者来说,一个有用的启动选项是 --safe-updates(或者 --i-am-a-dummy,具有相同的效果)。这对于您可能发表声明但忘记该条款的情况很有帮助通常,这样的语句会删除表中的所有行。使用 ,您只能通过指定标识它们的键值来删除行。这有助于预防事故。 DELETE FROM tbl_nameWHERE--safe-updates

当您使用该--safe-updates 选项时,mysql在连接到MySQL服务器时发出以下语句:

SET sql_safe_updates=1, sql_select_limit=1000, max_join_size=1000000;

请参见第5.1.5节“服务器系统变量”

该 SET 声明具有以下效果:

  • 除非您在 子句中指定关键限制或提供子句(或两者),否则您 不得执行 语句UPDATE或 DELETE语句例如: WHERELIMIT

    UPDATE tbl_name SET not_key_column=val WHERE key_column=val;
    
    UPDATE tbl_name SET not_key_column=val LIMIT 1;
  • 服务器将所有大型SELECT结果限制 为1,000行,除非该语句包含 LIMIT子句。

  • 服务器会中止SELECT可能需要检查超过1,000,000行组合的多表 语句。

要指定不同于1,000和1,000,000的限制,可以使用--select_limit和 --max_join_size选项覆盖默认值 

shell> mysql --safe-updates --select_limit=500 --max_join_size=10000
4.5.1.6.5禁用mysql自动重新连接

如果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自动重新连接控制”

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值