October 2013 Blog Posts

MySql命令行执行多行命令编辑时非常有用的命令

MitchellChu 2013-10-17 其他技术 编程语言

在MySql命令行下进行多行命令编辑是很正常的一个操作,但有的时候,我们在执行编辑的时候,难免会有各种失误,一旦到此时,我们往往不得其法,其实了解一下MySql命令行的一些参数和提示的信息将会对多行命令编辑起到事半功倍的效果。

为了避免尽可能的错误,首先自然是要了解在多行命令行下,会给出的各种提示符的作用,下标是在MySQL命令行编辑时可能出现的一些提示符,小伙伴们,你震惊了吗?

提示符 含义
mysql> 准备好接受新命令。
-> 等待多行命令的下一行。
‘> 等待下一行,等待以单引号(“’”)开始的字符串的结束。
“> 等待下一行,等待以双引号(“””)开始的字符串的结束。
`> 等待下一行,等待以反斜点(‘`’)开始的识别符的结束。
/*> 等待下一行,等待以/*开始的注释的结束。

了解完中的提示符的一些意思之后,只是能够提醒我们,减少我们犯错误的概率罢了,要是犯错了,就需要一些更高级的法器了。当然这些法器获取也不是很难,仅是一些小小的命令而已,看完下表相信你就会了。

Note that all text commands must be first on line and end with ';' —— 这句我就不翻译了[MitchellChu注]

命令行命令 多行编辑等效命令 说明
? (\?) 和`help'一样,会在命令行下操作的人都应该清楚这个东东的重要性。
clear (\c) 清理当前输入的语句,在多行编辑时,需要中途退出,在回车后,输入\c试试。
connect (\r) 重新连接到数据库服务器,可选参数db和host。
delimiter (\d) 设置语句的定界符。
ego (\G) 发送命令到MySQL服务器,并将结果列纵向显示。(译注:可参看Mitchell的上一篇求整型的最大值中的用法)
exit (\q) 退出MySQL,和quit的作用一样。
go (\g) 将命令发送到MySQL服务器。
help (\h) 显示帮助。
notee (\t) 不要写入外部文件。
print (\p) 打印当前的命令。
prompt (\R) 改变你mysql的提示。
quit (\q) 退出mysql。
rehash (\#) 重建已经完成的hash.
source (\.) 执行SQL脚本文件。需要一个文件名作为参数。
status (\s) 从服务器获取状态信息。
tee (\T) 设置外部文件[to_outfile]. 所有的信息将附加到给定的外部文件中。
use (\u) 使用另外一个数据库,需要database的名称作为惨呼。
charset (\C) 切换到另外的字符集。 可能在处理多字节字符集binlog的时候需要。
warnings (\W) 在每个语句后面显示警告。
nowarning (\w) 不要在每个语句后面显示警告。

 有了这些法器(),在执行多行命令编辑的时候,就能更加灵活了。比如,在多行命令执行到一半,我们需要退出,那么只要使用个\c就完事了。

mysql> CREATE TABLE IF NOT EXISTS table_name1
    -> (
    -> id BIGINT UNSIGNED PRIMARY KEY,
    -> name VARCHAR(120) NOT NULL
    -> -- forgot use [,]
    -> column_name VARCHAR(126) NOT NULL,
    -> -- we found that it missed [,], wanna to cancel this command? just use \c
    -> \c
mysql>

当时在这么一行行把命令重新敲一遍,也是非常痛苦的,怎么办?\p先打印出来,回头好复制,在粘贴回去就好了。

mysql> CREATE TABLE IF NOT EXISTS table_name1
    -> (
    -> id BIGINT UNSIGNED PRIMARY KEY,
    -> name VARCHAR(120) NOT NULL
    -> -- forgot use [,]
    -> column_name VARCHAR(126) NOT NULL,
    -> -- we found that it missed [,], wanna to cancel this command? just use \c
    -> -- but we want reuse this command later. First, use \p to print current command.
    -> \p
--------------
CREATE TABLE IF NOT EXISTS table_name1
(
id BIGINT UNSIGNED PRIMARY KEY,
name VARCHAR(120) NOT NULL

column_name VARCHAR(126) NOT NULL,


--------------

    -> \c
mysql>

到此结束,剩下的请自行演练。

BTW:在Windows模式下,MySQL的命令行的clear命令是有问题的,所以如果你想知道为什么mysql 的clear命令在Windows的CMD模式下怎么没有效果,这就是原因了。

 

MySql获取数值类型的最大值的另类方法

MitchellChu 2013-10-16 其他技术 编程语言

中有的时候需要获取整数的最大值——比如在LIMIT的时候:

-- 需要获取第5条记录到最后的所有记录
-- 不得不在最后输入一个最大值,这个值如果简单点我们希望是BIGINT的最大值
-- 不过,我们忘了BIGINT的最大值是?
SELECT * FROM table_name WHERE condition=cvalue LIMIT 5, 838882;

当忘掉的最大值的时候,我们最简单的方法是使用~0,让后通过位移来取得各个整数类型的对应

-- 通过~0来获取BIGINT的最大值(无符号)
-- 通过~0的右移位数来获取各个整数类型的最大值
-- \G 是让每一列占据一行显示
SELECT ~0 as max_bigint_unsigned
,      ~0 >> 32 as max_int_unsigned
,      ~0 >> 40 as max_mediumint_unsigned
,      ~0 >> 48 as max_smallint_unsigned
,      ~0 >> 56 as max_tinyint_unsigned
,      ~0 >> 1  as max_bigint_signed
,      ~0 >> 33 as max_int_signed
,      ~0 >> 41 as max_mediumint_signed
,      ~0 >> 49 as max_smallint_signed
,      ~0 >> 57 as max_tinyint_signed
,      'This code came from internet resource -- MitchellChu' as extinfo
\G

*************************** 1. row ***************************
   max_bigint_unsigned: 18446744073709551615
      max_int_unsigned: 4294967295
max_mediumint_unsigned: 16777215
 max_smallint_unsigned: 65535
  max_tinyint_unsigned: 255
     max_bigint_signed: 9223372036854775807
        max_int_signed: 2147483647
  max_mediumint_signed: 8388607
   max_smallint_signed: 32767
    max_tinyint_signed: 127
               extinfo: This code came from internet resource -- MitchellChu
1 row in set (0.00 sec)

 看完代码是不是有恍然大悟的感觉呢?

关于博主

  一枚成分复杂的网络IT分子,属于互联网行业分类中的杂牌军。