MySQL 语言结构
一、实验介绍
1.1 实验内容
本实验中主要学习 MySQL 语言结构中的一些基本概念,偏重理论,实际动手实践内容不多,包括文字值、识别符、用户自定义变量和注释。
1.2 实验知识点
- 文字值:字符串,数值型,日期类型,十六进制,布尔值,位域,NULL值
- 识别符:数据库、表、索引、列和别名
- 用户自定义变量
- 注释语句
1.3 实验环境
课程使用的实验环境为 Ubuntu Linux 14.04 64 位版本。实验中会用到程序:
- Mysql 5.5.50
- Xfce终端
二、实验步骤
2.1 文字值
参考官方文档:http://dev.mysql.com/doc/refman/5.5/en/literals.html
2.1.1 字符串
字符串指用单引号(‘'’)或双引号(‘"’)引用起来的字符序列。例如:
'a string'
"another string"
如果SQL服务器模式启用了NSI_QUOTES
,可以只用单引号引用字符串,此时用双引号引用的字符串被解释为一个识别符。
字符串可以有一个可选的介绍字符_charset_name
和COLLATE
子句:
[_charset_name]'string' [COLLATE collation_name]
例如:
SELECT _latin1'string';
SELECT _latin1'string' COLLATE latin1_danish_ci;
在字符串中,某些序列具有特殊含义。这些序列均以反斜线(\
)开始,即所谓的转义字符。MySQL识别以下转义序列:
这些序列对大小写敏感。例如,\b
为退格,但\B
为字符B
。
\%
和\_
序列如果用于通配符的模式匹配环境中匹配%
和_
。参见字符串比较函数。请注意如果你在其它环境中使用\%
或\_
,它们返回字符串\%
和\_
,而不是%
和_
。
在其它转义序列中,反斜线被忽略。也就是说,转义字符就仿佛没有转义。
转义比较好理解,引用就比较麻烦了,此处省略30字,因为官网给出的解释比较难以被理解,因此直接举例。
下面的SELECT语句显示了引用和转义如何工作:
mysql> SELECT 'hello', '"hello"', '""hello""', 'hel''lo', '\'hello';
mysql> SELECT "hello", "'hello'", "''hello''", "hel""lo", "\"hello";
mysql> SELECT 'This\nIs\nFour\nLines';
mysql> SELECT 'disappearing\ backslash';
查看输出结果,有没有理解一点?
如果你想要在字符串列内插入二进制数据(例如BLOB),必须通过转义序列表示下面的字符:
当编写应用程序时,在将包含这些特殊字符的字符串发送到MySQL服务器的SQL语句中的数据值之前,必须对它们正确进行转义。可以用两种方法来完成:
- 用转义特殊字符的函数处理字符串。例如,在C程序中,可以使用C语言的API函数mysql_real_escape_string() 来转义字符。
- 显式转义特殊字符,许多MySQL API提供了占位符功能,允许你在查询字符串中插入特殊标记,然后当你发出查询时将数据值同这些标记绑定起来。在这种情况下,API关注转义值中的特殊字符。
2.1.2 数值型
整数用一系列阿拉伯数字表示,浮点数使用