首页
登录 | 注册

MySQL语言参考(1):语言结构 (2)

作者:极度深寒   来自:bbs.51cto.com



在 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 上一样。

     注意:
     尽管在 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 的选项来改变。

     变量不必被初始化。缺省地,他们的值为 NULL 并可以存储一个整数、实数或字符串值。当连接线程退出时,这个线程的所有变量将会自动地被释放。

     你可以通过 SET 句法来设置一个变量:

     SET @variable= { integer expression | real expression | string expression }
     [,@variable= ...].

     在语句中除了 SET 之外还可以直接为一个变量赋值。然而在这各情况下,赋值操作符为 := 而不是 =,因为 = 在非 SET 语句中是用于比较的:

      mysql> SELECT @t1:=(@t2:=1)+@t3:=4,@t1,@t2,@t3;
     +---------------------------------+-------------+---------------+--------------+
     | @t1:=(@t2:=1)+@t3:=4   |         @t1  |            @t2 |          @t3  |
     +---------------------------------+-------------+---------------+--------------+
     |                                       5 |               5 |                 1 |                4 |
     +---------------------------------+-------------+---------------+--------------+

     用户变量可以用于表达式所允许的任何地方。注意,这在数字必须明确指定的语境中并不适用,例如,在 SELECT 的 LIMIT 子句中或一个 LOAD DATA 语句的 IGNORE number LINES 的子句中。

     注意:
     在一个 SELECT 语句中,各个表达式只有在它被送到客户端时才能被求值。这就意味着,在 HAVING、GROUP BY 或 ORDER BY 子句中,你不能使用一个包含在 SELECT 部份所设置变量的表达式。例如:下面的语句将不会按预期的运作:

     mysql> SELECT (@aa:=id) AS a, (@aa+3) AS b FROM table_name HAVING b=5;

     原因是因为 @aa 不会是当前行的值,而是前一个符合条件的行的 id 值。

     规则就是在同一语句中决不赋值 使用同一个变量。

6.1.5 系统变量

     从 MySQL 4.0.3 开始,我们提供了对大量的系统变量和连接变量的更好的访问方式。你可以不需要关闭服务器就可以更改其中的大部变量值。

相关文章

  • MySQL学习分享--Thread pool
    刚刚经历了淘宝的双11,真实感受到了紧张的氛围.尽管DB淡定的度过,但是历程中的波折,可谓惊心动魄.其中MySQL在大量连接(万级)的场景下,表现出性能远远低于预期,并且出现明显的波动,成为一个非常重要的问题.问题虽然解决,但是后续的思考和 ...
  • 基于<MySQL学习分享--MySQL 5.7性能改进>文中提到的事务锁的优化,MySQL在5.6之前,trx_sys事务锁一直是影响性能的主要因素.在应用中也会经常发现系统资源利用不起来,追查的结果往往是trx_sys事务锁的 ...
  • 导读 如何提高MySQL的安全性 关于 datadir 正确的权限模式是 0750,甚至是 0700. 最好是直接设置成 0700,相对更安全些,避免数据文件意外泄漏. [yejr@imysql.com]# chown -R mysql.m ...
  • 1.连接Mysql 格式: mysql -h主机地址 -u用户名 -p用户密码 1.连接到本机上的MYSQL. 首先打开DOS窗口,然后进入目录mysql\bin,再键入命令mysql -u root -p,回车后提示你输密码.注意用户名前 ...
  • 对于PHP程序设计语言来说.每个人的学习方式不同,写这篇文章的目的是分享一下自己的学习过程,仅供参考,不要一味的用别人的学习方法,找对自己有用的 学习方式.经常在某些论坛和QQ群里看到一些朋友会问"怎样才能学好PHP,怎样才能学好 ...
  • 为什么大部分程序员看不起PHP这门语言?
    原因很简单,人的追求都是不一样的: 2. 有些程序员以如何快速低成本的解决领域问题为导向,关注成本向,PHP 作为主要工程语言,可快速满足项目交付,满足市面上绝大多数没有高并发需求的企业的 IT 需求,所以符合这些程序员的诉求. 世界上最好 ...

2020 unjeep.com webmaster#unjeep.com
12 q. 0.013 s.
京ICP备10005923号