美河学习在线 www.eimhe.com
数据类型 参 考
用户变量 参 考
列类型参 考
SQL
语 句 参 考
M
M
M
y
y
y
S
S
S
Q
Q
Q
L
L
L
语
语
语
言
言
言
参
参
参
考
考
考
附
附
录
录
一
一
1
附录一
SQL
语言参考
htt p : // w w w . y ur e n n e t . c om
217
1.1 数据类型参考:怎么写字符串和数字
1.1.1
字符串
一个字符串是一个字符序列,由单引号
(
“
'
”
)
或双引号
(
“
"
”
)
字符
(
后者只有你不在
ANSI
模式运行
)
包围。例如:
'a string'
"another string"
在字符串内,某个顺序有特殊的意义。这些顺序的每一个以一条反斜线
(
“
\
”
)
开始,
称为转义字符。
MySQL
识别下列转义字符:
\0
一个
ASCII 0 (NUL)
字符。
\n
一个新行符。
\t
一个定位符。
\r
一个回车符。
\b
一个退格符。
\'
一个单引号
(
“
'
”
)
符。
\"
一个双引号
(
“
"
”
)
符。
\\
一个反斜线
(
“
\
”
)
符。
\%
一个“
%
”符。它用于在正文中搜索“
%
”的文字实例,否则这里“
%
”将解释为一
个通配符。
\_
一个“
_
”符。它用于在正文中搜索“
_
”的文字实例,否则这里“
_
”将解释为一个
通配符。
注意,如果你在某些正文环境中使用“
\%
”或“
\%_
”,这些将返回字符串“
\%
”和
“
\_
”而不是“
%
”和“
_
”。
MySQL
金 典 培 训 教 程
218
htt p : // w w w . y ur e n n e t . c om
有几种方法在一个字符串内包括引号:
一个字符串内用“
'
”加引号的“
'
”可以被写作为“
''
”。
一个字符串内用“
"
”加引号的“
"
”可以被写作为“
""
”。
你可以把一个转义字符(“
\
”)放在引号前面。
一个字符串内用“
"
”加引号的“
'
”不需要特殊对待而且不必被重复或转义。同
理,一个字符串内用“
'
”加引号的与“
"
”也不需要特殊对待。
下面显示的
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 |
+--------------------+
如果你想要把二进制数据插入到一个
BLOB
列,下列字符必须由转义序列表示:
NUL
ASCII 0
。你应该用
'\0'
(一个反斜线和一个
ASCII '0'
)表示它。
\
ASCII 92
,反斜线。用
'\\'
表示。
'
ASCII 39
,单引号。用“
\'
”表示。
"
ASCII 34
,双引号。用“
\"
”表示。
如果你写
C
代码,你可以使用
C API
函数
mysql_escape_string()
来为
INSERT
语句转
义字符。在
Perl
中,你可以使用
DBI
包中的
quote
方法变换特殊的字符到正确的转义序
列。
1
附录一
SQL
语言参考
htt p : // w w w . y ur e n n e t . c om
219
你应该在任何可能包含上述任何特殊字符的字符串上使用转义函数!
1.1.2
数字
整数表示为一个数字顺序。浮点数使用“
.
”作为一个十进制分隔符。这两种类型的
数字可以前置“
-
”表明一个负值。
有效整数的例子:
1221
0
-32
有效浮点数的例子:
294.42
-32032.6809e+10
148.00
一个整数可以在浮点上下文使用;它解释为等值的浮点数。
1.1.3
十六进制值
MySQL
支持十六进制值。在数字上下文,它们表现类似于一个整数
(64
位精度
)
。在
字符串上下文,它们表现类似于一个二进制字符串,这里每一对十六进制数字被变换为一
个字符。
mysql> SELECT 0xa+0
-> 10
mysql> select 0x5061756c;
-> Paul
十六进制字符串经常被
ODBC
使用,给出
BLOB
列的值。
1.1.4 NULL
值
NULL
值意味着“无数据”并且不同于例如数字类型的
0
为或字符串类型的空字符
串。
NULL
值的概念是造成
SQL
的新手的混淆的普遍原因,他们经常认为
NULL
是和一
个空字符串
''
的一样的东西。不是这样的!例如,下列语句是完全不同的:
mysql> INSERT INTO my_table (phone) VALUES (NULL);
mysql> INSERT INTO my_table (phone) VALUES ("");
两个语句把值插入到
phone
列,但是第一个插入一个
NULL
值而第二个插入一个空
字符串。第一个的含义可以认为是“电话号码不知道”,而第二个则可意味着“她没有电
话”。
在
SQL
中,
NULL
值在于任何其他值甚至
NULL
值比较时总是假的(
FALSE
)。包
MySQL
金 典 培 训 教 程
220
htt p : // w w w . y ur e n n e t . c om
含
NULL
的一个表达式总是产生一个
NULL
值,除非在包含在表达式中的运算符和函数
的文档中指出。在下列例子,所有的列返回
NULL
:
mysql> SELECT NULL,1+NULL,CONCAT('Invisible',NULL);
如果你想要寻找值是
NULL
的列,你不能使用
=NULL
测试。下列语句不返回任何
行,因为对任何表达式,
expr = NULL
是假的:
mysql> SELECT * FROM my_table WHERE phone = NULL;
要想寻找
NULL
值,你必须使用
IS NULL
测试。下例显示如何找出
NULL
电话号码
和空的电话号码:
mysql> SELECT * FROM my_table WHERE phone IS NULL;
mysql> SELECT * FROM my_table WHERE phone = "";
在
MySQL
中,就像很多其他的
SQL
服务器一样,你不能索引可以有
NULL
值的
列。你必须声明这样的列为
NOT NULL
,而且,你不能插入
NULL
到索引的列中。
当用
LOAD DATA INFILE
读取数据时,空列用
''
更新。如果你想要在一个列中有
NULL
值,你应该在文本文件中使用
\N
。字面上的词
'NULL'
也可以在某些情形下使用。见
1.16 LOAD DATA INFILE
句法。
当使用
ORDER BY
时,首先呈现
NULL
值。如果你用
DESC
以降序排序,
NULL
值
最后显示。当使用
GROUP BY
时,所有的
NULL
值被认为是相等的。
为了有助于
NULL
的处理,你能使用
IS NULL
和
IS NOT NULL
运算符和
IFNULL()
函数。
对某些列类型,
NULL
值被特殊地处理。如果你将
NULL
插 入 表 的 第 一 个
TIMESTAMP
列 , 则 插 入 当 前 的 日 期 和 时 间 。 如 果 你 将
NULL
插入一个
AUTO_INCREMENT
列,则插入顺序中的下一个数字。
当使用文本文件导入或导出格式
(LOAD DATA INFILE, SELECT ... INTO OUTFILE)
时,
NULL
可以用
\N
表示。见
1.16 LOAD DATA INFILE
句法。
1.1.5
数据库、表、索引、列和别名的命名
数据库、表、索引、列和别名的名字都遵守
MySQL
同样的规则
:
注意,从
MySQL3.23.6
开始规则改变了,此时我们引入了用
'
引用的标识符
(
数据库、
表和列命名
)
(如果你以
ANSI
模式运行,
"
也将用于引用标识符)。
表附
1-1
命名规则
标识符
最大长度
允许的字符
数据库
64
在一个目录名允许的任何字符,除
了/.
表
64
在文件名中允许的任何字符,除了/
或.
列
64
所有字符
别名
255
所有字符
注意,除了以上,你在一个标识符中不能有
ASCII(0)
或
ASCII(255)
。
- 1
- 2
- 3
- 4
- 5
- 6
前往页