mysql语法的注意事项

这是一篇译文, 主要是看了mysql5.5的官方英文文档说到了一些关于mysql语句的小特点. 感觉比较有意思就拿过来翻一下,顺便自己巩固下.
英文原版链接: 在第三章的位置
https://docs.oracle.com/cd/E19957-01/mysql-refman-5.5/refman-5.5.pdf

这是一个简单的命令,请求server告知本机上mysql的版本以及当前日期.

mysql> SELECT VERSION(), CURRENT_DATE;
+-------------------------+--------------+
| VERSION()               | CURRENT_DATE |
+-------------------------+--------------+
| 5.5.55-0ubuntu0.14.04.1 | 2017-07-05   |
+-------------------------+--------------+
1 row in set (0.00 sec)

这个询问命令说明了一些mysql的特点:
1: 通常一个命令由SQL語句以及随后跟着的一个分号组成。(有一些例外不需要分号的。之前提到的QUIT是一个例子,后面还有有其它的例子。)
2: 你输入一个命令, mysql将它发送到server去执行, 然后显示结果, 再打印一个mysql>来显示它准备好接受下一个命令了.
3: mysql用数据表格的形式(行和列)来展示查询结果. 第一行包含了每一列的标签. 接下来的行是对应的查询结果. 一般来说, 列的标签就是取自你查询的数据库数据表的列的名字. 如果你正在检索的是一个表达式的值而不是一个数据表的列的值(如下例所示), mysql将会用表达式本身来标记列.
4: mysql会显示返回的行的个数以及查询执行的时间,来让你对server的性能有个粗略的了解. 这个值并不是很精确, 因为他们代表了时钟时间(不是CPU或者机械时间), 并且会受到例如server负载以及网络方面的影响. (为了讲话, “row in set”一行有时不会再其他章节中显示).

关键字可以部分大小写, 如下的查询语句是等价的:

mysql> SELECT VERSION(), CURRENT_DATE;
mysql> select version(), current_date;
mysql> SeLeCt vErSiOn(), current_DATE;

这里还有一个查询. 他表明了你还可以用mysql来做简单的计算器:

mysql> SELECT SIN(PI()/4), (4+1)*5;

+------------------+---------+

| SIN(PI()/4)      | (4+1)*5 |

+------------------+---------+

| 0.70710678118655 |      25 |

+------------------+---------+

1 row in set (0.02 sec)

目前为止的查询语句都相对较短, 单行语句. 你还可以在一行输入多个语句.只要在每个语句后面加上分号就可以了.

mysql> SELECT VERSION(); SELECT NOW();

+-----------------+

| VERSION()       |

+-----------------+

| 5.1.2-alpha-log |

+-----------------+

1 row in set (0.00 sec)


+---------------------+

| NOW()               |

+---------------------+

| 2005-10-11 15:15:00 |

+---------------------+

1 row in set (0.00 sec)

一个命令并不是必须要在一行显示, 较长的命令也可以用多行来显示. mysql是通过分号而不是寻找输入行的结尾来判断你输入的命令是否结束. (也就是说, mysql接受自由形式的输入: 他会收集输入行, 一直到他遇到分号才会去执行命令).
这里有一个简单的多行语句:

mysql> SELECT

    -> USER()

    -> ,

    -> CURRENT_DATE;

+---------------+--------------+

| USER()        | CURRENT_DATE |

+---------------+--------------+

| jon@localhost | 2005-10-11   |

+---------------+--------------+

在这个例子里, 注意当你多行查询语句的第一行之后, 提示符从mysql>变成了->. 这就是mysql用来提醒你, 他并没有看到结束语句, 并且还在等待剩余的语句. 提示符可以提供一些有价值的反馈. 如果好好利用, 你会知道mysql在等待什么.
如果你决定不执行你正在输入的折断语句, 你可以输入\c来取消他.

mysql> SELECT
    -> USER()
    -> \c
mysql>

同样,这里注意下提示符. 输入\c之后,他又变回了mysql>, 表示mysql准备好了接受一段新的命令了.

如下的表格展示了你可能会遇到的提示符并总结了他们在mysql中代表的意思:

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

人们经常在输入单行语句的时候,因为忘记了结束用的分号,而导致了出现多行语句. 在这种情况下, mysql会等待更多的输入:

mysql> SELECT USER()
    ->

如果你遇到这种情况(你以为你输入了一个语句, 但却只是返回了一个->提示符), 很有可能是mysql在等待一个分号. 如果你不知道提示符的预意, 那你可能就要想一会了. 输入一个分号来完成语句, 然后mysql去执行他:

mysql> SELECT USER()

    -> ;
+---------------+

| USER()        |

+---------------+

| jon@localhost |

+---------------+

‘>和”>会出现在收集字符串的时候(也就是说, mysql在等待字符串的结束). 在mysql中, 你可以用’或者”来把字符串括起来(例如’hello’或者”hello”), mysql允许输入跨多行的字符串. 当你看到’>或者”>提示符时候, 意味着, 你输入了一个以’或者”开始的字符串, 但是并没有对应的符号来结束这个字符串. 通常预示着你可能漏掉了一个引号. 例如:

mysql> SELECT * FROM my_table WHERE name = 'Smith AND age < 30;
    '>

如果你输入了一个select语句, 然后按了enter等待结果, 但是什么也没发生. 不要困惑为什么查询需要这么长时间, 你应该注意’>这个提示符,. 他预示着mysql需要知道剩余未知的字符串.

这时候, 你应该怎么做? 最简单的是取消这个命令.但是这种情况下, 你不能只是输入\c, 因为mysql会以为\c也是字符串的一部分. 你应该输入一个结束的引号,再输入\c结束.

mysql> SELECT * FROM my_table WHERE name = 'Smith AND age < 30;
    '> '\c
mysql>

提示符变回了mysql>,表明mysql准备好了接受新的命令.

>提示符和'>, ">相似.>表示的是,你还没结束一段以`>开始的提示符, 其他你输入的命令都会被忽略, 哪怕是包含了quit的行. 这点有时会比较让人困惑, 尤其是当你并不知道你需要提供一个结束引号才能取消当前的命令的时候.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值