注意,除了上面的,在一个标识符中还不能有 ascii(0) 或 ascii(255) 或引用字符。
注意,如果标识符是一个受限掉的词或包含特殊的字符,当使用它时,必须以一个 ` (backtick) 来引用它。
mysql> select * from `select` where `select`.id > 100;
查看章节 6.1.7 mysql 对保留字挑剔吗?。
在 mysql 3.23.6 以前的版本中,命名规则如下:
-
一个名字可以由当前字符集中包含的文字与数字字符以及 “_” 和 “$” 组成。缺省字符集为 iso-8859-1
latin1;这可以通过改变
mysqld的--default-character-set的选项来改变。查看章节 4.6.1 用于数据和排序的字符集。 - 一个名字可以以在名字中合法的任何字符开始。特别地,一个名字可以以一个数字开始(这不同于许多其它的数据库系统!)。但一个名字不能 仅仅 以数字组成。
- 不能在名字中使用 “.” 字符,因为它是用于扩充格式的,你可以用它引用列(见下面)。
建议不要使用象 1e 这样的名字,因为一个表达式 1e+1 是存在二义性的。它可以被解释为表达式 1e + 1 或数字 1e+1。
在 mysql 中,你可以使用下列表格中的任一种方式引用一个列:
| 列引用 | 含义 |
col_name | 列 col_name
来自查询所用的任何一个表中对应字段
|
tbl_name.col_name | 列 col_name 来自当前数据库中的表
tbl_name
|
db_name.tbl_name.col_name | 列 col_name 来自数据库 db_name 中的表
tbl_name。这个形式从 mysql 3.22 或以后版本开始可用。 |
`column_name` | 该字段是一个关键词或包含特殊字符。 |
在一条语句中的列引用中,不需要明确指定一个 tbl_name 或 db_name.tbl_name 前缀,除非这个引用存在二义性。例如,假设表 t1 和 t2 均包含一个字段
c,当用一个使用了 t1 和 t2 的 select 检索 c 时。在这种情况下,c 存在二义性,因为它在这个语句所使用的表中不是唯一的,因而必须通过写出 t1.c 或 t2.c 来指明你所需的是哪个表。同样的,如果从数据库 db1 的表 t 和数据库 db2 的表 t 中检索,你必须用db1.t.col_name 和 db2.t.col_name 来指定引用哪个库表的列。
句法 .tbl_name 意味着表 tbl_name 在当前数据库中。这个句法是为了与 odbc 兼容,因为一些 odbc
程序以一个 “.” 字符作为表名的前缀。
6.1.3 名字的大小写敏感性
在 mysql 中,数据库和表对就于那些目录下的目录和文件。因而,操作系统的敏感性决定数据库和表命名的大小写敏感。这就意味着数据库和表名在 windows 中是大小写不敏感的,而在大多数类型的 unix 系统中是大小写敏感的。一个特例是 mac os x,当缺省的 hfs+ 文件系统使用时。然而 mac os x 还支持 ufs 卷,那些在 mac os x 是大小写敏感的就如他们在任一 unix 上一样。查看章节 1.8.3 mysql 对 ansi sql92 的扩展。
注意:尽管在 windows 中数据库与表名是忽略大小写的,你不应该在同一个查询中使用不同的大小写来引用一个给定的数据库和表。下面的查询将不能工作,因为它以 my_table 和 my_table 引用一个表:
mysql> select * from my_table where my_table.col=1;
列名与列的别名在所有的情况下均是忽略大小写的。
表的别名是区分大小写的。下面的查询将不能工作,因为它用 a 和 a 引用别名:
mysql> select col_name from tbl_name as a
-> where a.col_name = 1 or a.col_name = 2;
如果记忆数据库和表名的字母大小写有困难,建议采用一个一致一约定,例如总是以小写字母创建数据库和表。
避免这个问题的另一个办法就是以 -o lower_case_table_names=1 参数启动 mysqld。缺省地在 windows 中这个选项为 1 ,在
unix 中为 0。
如果 lower_case_table_names 为 1 ,mysql 将在存储与查找时将所有的表名转换为小写字线。(从 mysql 4.0.2 开始,这个选项同样适用于数据库名。) 注意,当你更改这个选项时,你必须在启动 mysqld 前首先将老的表名转换为小写字母。
如果将 myisam 从 windows 移动到一个 unix 磁盘中,在某些情况下你可能需要使用 “mysql_fix_extensions” 工具来修正指定数据库目录下的文件扩展名(小写字母 “.frm”,大写字母 “.myi” 和 “.myd”)。“mysql_fix_extensions” 存放在 “scripts” 子目录下。
6.1.4 用户变量
mysql 支持连接特定(connection-specific)的用户变量,用 @variablename 句法表示。一个变量名可以由当前字符集中包含的文字与数字字符以及 “_”、“$” 和 “.” 组成。缺少的字符集为 iso-8859-1 latin1;这可以通过改变 mysqld 的--default-character-set 的选项来改变。查看章节 4.6.1 用于数据和排序的字符集。
变量不必被初始化。缺省地,他们的值为 null 并可以存储一个整数、实数或字符串值。当连接线程退出时,这个线程的所有变量将会自动地被释放。
你可以通过 set 句法来设置一个变量:
set @variable= { integer expression | real expression | string expression }
[,@variable= ...].
在语句中除了 set 之外还可以直接为一个变量赋值。然而在这各情况下,赋值操作符为 := 而不是 =,因为 = 在非 set 语句中是用于比较的: