📄 mysql 语言参考.txt
字号:
6 MySQL 语言参考
译者序
目录
列类型与函数索引
6.1 MySQL 语言结构
6.1 语言结构
6.1.1 文字 怎么写字符串与数字
6.1.1.1 字符串
6.1.1.2 数字
6.1.1.3 十六进制值
6.1.1.4 NULL 值
6.1.2 数据库、表、索引、列和别名
6.1.3 名字的大小写敏感性
6.1.4 用户变量
6.1.5 系统变量
6.1.6 注释句法
6.1.7 MySQL 对保留字挑剔吗?
6.2 列类型
6.2 列类型
6.2.1 数字类型
6.2.2 Date 和 Time 类型
6.2.2.1 Y2K 问题和日期类型
6.2.2.2 DATETIME、DATE 和 TIMESTAMP 类型
6.2.2.3 TIME 类型
6.2.2.4 YEAR 类型
6.2.3 字符串类型
6.2.3.1 CHAR 和 VARCHAR 类型
6.2.3.2 BLOB 和 TEXT 类型
6.2.3.3 ENUM 类型
6.2.3.4 SET 类型
6.2.4 为列选择正确的类型
6.2.5 使用来自其它的数据库引擎的列类型
6.2.6 列类型存储需求
6.2.6.1 数字类型存储需求
6.2.6.2 日期和时间类型存储需求
6.2.6.3 字符串类型存储需求
6.3 用于 SELECT 和 WHERE 子句的函数
6.3 用于 SELECT 和 WHERE 子句的函数
6.3.1 无类型的特殊运算符和函数
6.3.1.1 圆括号
6.3.1.2 比较运算符
6.3.1.3 逻辑运算符
6.3.1.4 控制流函数
6.3.2 字符串函数
6.3.2.1 字符串比较函数
6.3.2.2 字母大小写敏感性
6.3.3 数字函数
6.3.3.1 算术运算
6.3.3.2 数学函数
6.3.4 日期和时间函数
6.3.5 Cast 函数
6.3.6 其它函数
6.3.6.1 位函数
6.3.6.2 辅助功能函数
6.3.7 用于 GROUP BY 子句的函数
6.4 数据操纵 SELECT, INSERT, UPDATE, DELETE
6.4 数据操纵 SELECT, INSERT, UPDATE, DELETE
6.4.1 SELECT 句法
6.4.1.1 JOIN 句法
6.4.1.2 UNION 句法
6.4.2 HANDLER 句法
6.4.3 INSERT 句法
6.4.3.1 INSERT ... SELECT 句法
6.4.4 INSERT DELAYED 句法
6.4.5 UPDATE 句法
6.4.6 DELETE 句法
6.4.7 TRUNCATE 句法
6.4.8 REPLACE句法
6.4.9 LOAD DATA INFILE 句法
6.4.10 DO 句法
6.5 数据定义 CREATE、DROP、ALTER
6.5 数据定义 CREATE、DROP、ALTER
6.5.1 CREATE DATABASE 句法
6.5.2 DROP DATABASE 句法
6.5.3 CREATE TABLE 句法
6.5.3.1 隐式的列定义变化
6.5.4 ALTER TABLE 句法
6.5.5 RENAME TABLE 句法
6.5.6 DROP TABLE 句法
6.5.7 CREATE INDEX 句法
6.5.8 DROP INDEX 句法
6.6 基本的 MySQL 用户实用命令
6.6 基本的 MySQL 用户实用命令
6.6.1 USE 句法
6.6.2 DESCRIBE 句法 (获得列的信息)
6.7 MySQL 事务与锁定命令
6.7 MySQL 事务与锁定命令
6.7.1 BEGIN/COMMIT/ROLLBACK 句法
6.7.2 LOCK TABLES/UNLOCK TABLES 句法
6.7.3 SET TRANSACTION 句法
6.8 MySQL 全文搜索
6.8 MySQL 全文搜索
6.8.1 全文的限制
6.8.2 微调 MySQL 全文搜索
6.8.3 全文搜索 TODO
6.9 MySQL 查询缓存
6.9 MySQL 查询缓存
6.9.1 查询缓存如何运作
6.9.2 查询缓存设置
6.9.3 在 SELECT 中的查询缓存选项
6.9.4 查询缓存的状态和维护
MySQL Reference Manual for version 4.1.0-alpha.
--------------------------------------------------------------------------------
6.3 用于 SELECT 和 WHERE 子句的函数
一个 SQL 语句中的 select_expression 或 where_definition 可由任何使用了下面所描述函数的表达式组成。
包含 NULL 的表达式总是得出一个 NULL 值结果,除非表达式中的操作和函数在文档中有另外的说明。
注意:在一个函数名和跟随它的括号之间必须不存在空格。这有助于 MySQL 语法分析程序区分函数调用和对恰巧与函数同名表或列的引用。然而,参数左右两边的空格却是允许的。
你可以强制 MySQL 接受函数名后存在空格的形式,这需要通过以 --ansi 选项启动 mysqld,或在 mysql_connect() 中使用 CLIENT_IGNORE_SPACE,但是,在这种情况下,所有的函数名均将成为保留字。查看章节 1.8.2 以 ANSI 模式运行 MySQL.
为了简洁,从 mysql 程序输出的例子以缩写的形式显示。因此:
mysql> SELECT MOD(29,9);
1 rows in set (0.00 sec)
+-----------+
| mod(29,9) |
+-----------+
| 2 |
+-----------+
将被显示为这样:
mysql> SELECT MOD(29,9);
-> 2
6.3.1 无类型的特殊运算符和函数
6.3.1.1 圆括号
( ... )
括号,使用它来强制一个表达式的计算顺序。
mysql> SELECT 1+2*3;
-> 7
mysql> SELECT (1+2)*3;
-> 9
6.3.1.2 比较运算符
比较运算符的结果是 1 (TRUE)、0 (FALSE) 或 NULL。这些函数可工作于数字和字符串上。根据需要,字符串将会自动地被转换到数字,以及数字被转换成字符串(比如在 Perl 中)。
MySQL 使用下列规则进行比较:
如果一个或两个参数是 NULL,比较的结果是 NULL,除了 <=> 运算符。
如果在一个比较操作中两个参数均是字符串,他们将作为字符串被比较。
如果两个参数均是整数,他们作为整数被比较。
十六进制值如果不与一个数字进行比较,那么它将当作一个二进制字符串。
如果参数之一是一个 TIMESTAMP 或 DATETIME 列,而另一参数是一个常数,在比较执行之前,这个常数被转换为一个时间戳。这样做是为了对 ODBC 更友好。
在所有其它情况下,参数作为浮点(real)数字被比较。
缺省地,字符串使用当前字符集以忽略字母大小写的方式进行比较(缺省的字符集为 ISO-8859-1 Latin1,它对英语处理得很出色)。
下面的例子演示了对于比较操作字符串到数字的转换:
mysql> SELECT 1 > '6x';
-> 0
mysql> SELECT 7 > '6x';
-> 1
mysql> SELECT 0 > 'x6';
-> 0
mysql> SELECT 0 = 'x6';
-> 1
=
等于:
mysql> SELECT 1 = 0;
-> 0
mysql> SELECT '0' = 0;
-> 1
mysql> SELECT '0.0' = 0;
-> 1
mysql> SELECT '0.01' = 0;
-> 0
mysql> SELECT '.01' = 0.01;
-> 1
<>
!=
不等于:
mysql> SELECT '.01' <> '0.01';
-> 1
mysql> SELECT .01 <> '0.01';
-> 0
mysql> SELECT 'zapp' <> 'zappp';
-> 1
<=
小于或等于:
mysql> SELECT 0.1 <= 2;
-> 1
<
小于:
mysql> SELECT 2 < 2;
-> 0
>=
大于或等于:
mysql> SELECT 2 >= 2;
-> 1
>
大于:
mysql> SELECT 2 > 2;
-> 0
<=>
NULL 值安全等于:
mysql> SELECT 1 <=> 1, NULL <=> NULL, 1 <=> NULL;
-> 1 1 0
IS NULL
IS NOT NULL
测试一个值是或不是 NULL:
mysql> SELECT 1 IS NULL, 0 IS NULL, NULL IS NULL;
-> 0 0 1
mysql> SELECT 1 IS NOT NULL, 0 IS NOT NULL, NULL IS NOT NULL;
-> 1 1 0
为了能够与其它程序更好的工作,在使用 IS NULL 是 MySQL 支持下列额外选择性:
通过它,你可以找到最后插入的记录行:
SELECT * FROM tbl_name WHERE auto_col IS NULL
这个操作可以通过设置 SQL_AUTO_IS_NULL=0 来禁止。查看章节 5.5.6 SET 句法.
对于 NOT NULL 的 DATE 和 DATETIME 列,可以通过使用下列语句找到特殊的值 0000-00-00:
SELECT * FROM tbl_name WHERE date_column IS NULL
这需要通过某些 ODBC 应用程序才能工作(因为 ODBC 不支持一个 0000-00-00 日期)
expr BETWEEN min AND max
如果 expr 大于或等于 min ,并且 expr 小于或等于 max,BETWEEN 返回 1,否则返回 0。它等价于表达式 (min <= expr AND expr <= max) ,只要所有的参数均是相同的类型。 否则类型会依照上面的规则发生转换,但是应用于所有三个参数。注意,在 MySQL 4.0.5 之前,参数被转换到 expr 的类型。
mysql> SELECT 1 BETWEEN 2 AND 3;
-> 0
mysql> SELECT 'b' BETWEEN 'a' AND 'c';
-> 1
mysql> SELECT 2 BETWEEN 2 AND '3';
-> 1
mysql> SELECT 2 BETWEEN 2 AND 'x-3';
-> 0
expr NOT BETWEEN min AND max
等同于 NOT (expr BETWEEN min AND max)。
expr IN (value,...)
如果 expr 是 IN 列表中的作一值,它将返回 1,否则返回 0。如果所有的值均是常数,那么所有的值被依照 expr 的类型进行计算和排序。然后以一个二进制搜索方式完成项目的搜索。这就意味着,如果 IN 列表完全由常数组成,IN 将是非常快的。如果 expr 是一个字母大小写敏感的字符串表达式,字符串比较将以大小写敏感方式执行:
mysql> SELECT 2 IN (0,3,5,'wefwf');
-> 0
mysql> SELECT 'wefwf' IN (0,3,5,'wefwf');
-> 1
从 MySQL 4.1 开始(符合 SQL-99 标准),如果左手边的表达式是 NULL,或者在列表中没有发现相匹配的值并且列表中的一个表达式是 NULL,IN 均返回 NULL。
expr NOT IN (value,...)
等同于 NOT (expr IN (value,...))。
ISNULL(expr)
如果 expr 是 NULL,ISNULL() 返回 1,否则返回 0:
mysql> SELECT ISNULL(1+1);
-> 0
mysql> SELECT ISNULL(1/0);
-> 1
注意,对 NULL 值使用 = 进行比较总是为 false !
COALESCE(list)
返回列表中第一个非 NULL 的元素:
mysql> SELECT COALESCE(NULL,1);
-> 1
mysql> SELECT COALESCE(NULL,NULL,NULL);
-> NULL
INTERVAL(N,N1,N2,N3,...)
如果 N < N1 返回 0,如果 N < N2 返回 1,等等。所有的参数均被当作整数。为了函数能正确地工作,它要求 N1 < N2 < N3 < ... < Nn。这是因为它使用的是一个二进制的搜索(非常地快):
mysql> SELECT INTERVAL(23, 1, 15, 17, 30, 44, 200);
-> 3
mysql> SELECT INTERVAL(10, 1, 10, 100, 1000);
-> 2
mysql> SELECT INTERVAL(22, 23, 30, 44, 200);
-> 0
如果以任何一个标准运算符(=, <>..., 但除了 LIKE)对一个忽略大小写的字符串进行比较,尾部的空白空间(空格、TAB 和换行)均被忽略。
mysql> SELECT "a" ="A \n";
-> 1
6.3.1.3 逻辑运算符
在 SQL 中,所有的逻辑运算符返回的值均为 TRUE、FALSE 或 NULL (未知)。在 MySQL 中,它们由 1 (TRUE)、0 (FALSE) 和 NULL 实现。这些大部分在不同的 SQL 数据库间是相同的,然而某些可能会以一个非零值返回 TRUE。
NOT
!
逻辑非。如果操作数为 0,返回 1;如果操作数为非零,返回 0;如果操作数为 NOT NULL,返回 NULL。
mysql> SELECT NOT 10;
-> 0
mysql> SELECT NOT 0;
-> 1
mysql> SELECT NOT NULL;
-> NULL
mysql> SELECT ! (1+1);
-> 0
mysql> SELECT ! 1+1;
-> 1
最后一个例子返回 1,因为表达式是与 (!1)+1 一样被计算的。
AND
&&
逻辑与。如果所有的操作数都是非零或非 NULL 的,返回 1;如果有一个或多个操作数为 0 ,则返回 0,只要操作数中有 NULL 返回值就为 NULL。
mysql> SELECT 1 && 1;
-> 1
mysql> SELECT 1 && 0;
-> 0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -