比官网还要详细的MySQL语法结构

下面这几行是等价的:1-3 如果启用了ANSI_QUOTES SQL模式,字符串字面值只能在单引号内引号,因为双引号内的字符串被解释为标识符。作

———————————————————目录———————————————————

  • 字面量
  • 数据库对象
  • 关键字和保留字
  • 用户自定义变量
  • 表达式
  • 查询属性
  • 注释

————————————————————————————————————————-

字面量

  1. String Literals
  2. Numeric Literals
  3. Date and Time Literals
  4. Hexadecimal Literals
  5. Bit-Value Literals
  6. Boolean Literals
  7. NULL Values

—————————————————————————————————————–

String Literals(字符串字面量)

1-1 字符串是由字节或字符组成的序列,用单引号(‘)或双引号(“)字符括起来。例子:

'a string'
"another string"

1-2 相邻的引号字符串被连接成一个字符串。下面这几行是等价的:

'a string'
'a' ' ' 'string'

1-3 如果启用了ANSI_QUOTES SQL模式,字符串字面值只能在单引号内引号,因为双引号内的字符串被解释为标识符。

1-4 二进制字符串是由字节组成的字符串。每个二进制字符串都有一个名为binary的字符集和排序规则。非二进制字符串是一串字符。它具有二进制以外的字符集和与该字符集兼容的排序规则。对于这两种类型的字符串,比较都是基于字符串单元的数值。对于二进制字符串,单位是字节;比较使用数字字节值。对于非二进制字符串,单位是字符,一些字符集支持多字节字符;比较使用数字字符代码值。字符代码排序是字符串排序的一个函数。

注意:在mysql客户端中,二进制字符串使用十六进制表示法显示,这取决于——binary-as-hex的值。

1-5 一个字符串字元可以有一个可选的字符集导入器和COLLATE子句,将其指定为一个使用特定字符集和COLLATE的字符串

[_charset_name]'string' [COLLATE collation_name]
//example
SELECT _latin1'string';
SELECT _binary'string';
SELECT _utf8'string' COLLATE utf8_danish_ci;

1-6 您可以使用N’literal'(或N’literal’)在国家字符集中创建字符串。这些语句是等价的:

SELECT N'some text';
SELECT n'some text';
SELECT _utf8'some text';

1-7 在字符串中,某些序列具有特殊的意义,除非启用了NO_BACKSLASH_ESCAPES SQL模式。每个序列都以反斜杠(\)开头,称为转义字符。例如,\x就是x,这些序列是区分大小写的。例如,\b被解释为退格,但\B被解释为B。转义处理是根据由character_set_connection系统变量指示的字符集来完成的。

1-8 \%和\_序列用于在模式匹配上下文中搜索%和_的字面量实例,否则它们将被解释为通配符。在字符串中包含引号字符有几种方法:

用'引号括起来的字符串中的'可以写成"。
用"引用的字符串中的"可以写成""。
在引号字符前加转义字符(\)。
用"引用的字符串中的'不需要特殊处理,也不需要双引号或转义。同样地,'引号中的'不需要特殊处理。            

下面的SELECT语句演示了引号和转义的工作原理:

mysql> SELECT 'hello', '"hello"', '""hello""', 'hel''lo', '\'hello';
+-------+---------+-----------+--------+--------+
| hello | "hello" | ""hello"" | hel'lo | 'hello |
+-------+---------+-----------+--------+--------+

mysql> SELECT "hello", "'hello'", "''hello''", "hel""lo", "\"hello";
+-------+---------+-----------+--------+--------+
| hello | 'hello' | ''hello'' | hel"lo | "hello |
+-------+---------+-----------+--------+--------+

mysql> SELECT 'This\nIs\nFour\nLines';
+--------------------+
| This
Is
Four
Lines |
+--------------------+

mysql> SELECT 'disappearing\ backslash';
+------------------------+
| disappearing backslash |
+------------------------+

要将二进制数据插入字符串列(比如BLOB列),应该通过转义序列表示某些字符。反斜杠(\)和用来引用字符串的引号字符必须转义。在某些客户端环境中,可能还需要转义NUL或Control+Z。mysql客户端截断包含NUL字符的引号,如果不转义,控制+Z在Windows上可以作为文件结束符。

1-9 在编写应用程序时,任何可能包含这些特殊字符的字符串都必须正确转义,才能在发送到MySQL服务器的SQL语句中作为数据值使用。你可以通过两种方式做到这一点:

---使用转义特殊字符的函数处理该字符串。在C程序中,你可以使用mysql_real_escape_string_quote() 
C API函数来转义字符。看到mysql_real_escape_string_quote()。在构造其他SQL语句的SQL语句中,
可以使用QUOTE()函数。Perl DBI接口提供了quote方法来将特殊字符转换为适当的转义序列。
---作为显式转义特殊字符的替代方法,许多MySQL api提供了占位符功能,允许您将特殊标记插入到
语句字符串中,然后在发出语句时将数据值绑定到这些标记中。在本例中,API负责为您转义值中的
特殊字符。

Numeric Literals(数值类型)

2-1 数字字面值包括精确值(整数和DECIMAL)字面值和近似值(浮点)字面值。整数被表示为一个数字序列。数字可能包括。作为十进制分隔符 . 数字前可加-或+,分别表示负值或正值。在科学记数法中用尾数和指数表示的数是近似值数。

精确值数字字面值有整数部分或小数部分,或两者都有。他们有正负之分。例如:1,2,3.4,-5,-6.78,+9.10。

Date and Time Literals

Hexadecimal Literals

Bit-Value Literals

Boolean Literals

NULL Values

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/5930.html

(0)
上一篇 2022-12-14 13:23
下一篇 2022-12-14 13:23

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信