相关的文档10bet官方网站 下载本手册 本手册摘录

9.2.2标识符限定符

对象名称可能是不合格或合格的。在上下文中允许不合格的名称,其中姓名解释是明确的。限定名称包含至少一个限定符来阐明解释上下文,通过覆盖默认上下文或提供缺少的上下文来阐明解释上下文。

例如,此语句使用不合格的名称创建一个表T1.

创建表T1(i int);

因为T1.不包括指定数据库的限定符,语句在默认数据库中创建表。如果没有默认数据库,则会发生错误。

此语句使用限定名称创建表db1.t1

db1创建表。t1 (INT);

因为db1.t1包括数据库限定符db1,该声明创造了T1.在数据库中命名db1,无论默认数据库如何。限定符必须如果没有默认数据库,请指定。限定符五月如果存在默认数据库,则指定与默认值不同的数据库,或者如果默认值与指定的数据库,则会显式进行数据库。

限定符有以下特征:

  • 不合格的名称由单个标识符组成。限定名称由多个标识符组成。

  • 由多个部分组成的名称必须用句点() 人物。多个部分名称的初始部分充当影响上下文的限定符,以解释最终标识符。

  • 限定符字符是一个单独的令牌,不需要与关联标识符连续。例如,tbl_name.col_name.tbl_name。col_name.是等同的。

  • 如果包含多个部分的名称的任何组件需要引用,请单独引用它们,而不是引用整个名称。例如,写“我的表”:ammy-column`, 不是“my-table.my-column`

  • 在限定名称中遵循的保留字必须是标识符,因此在该上下文中不需要引用。

  • 语法.tbl_name.意思是表格tbl_name在默认数据库中。

    笔记

    此语法在MySQL 5.7.20中已弃用;我们希望在MySQL的未来版本中移除它。

对象名称的允许的限定符取决于对象类型:

  • 数据库名称是完全限定的,没有限定符:

    创建数据库DB1;
  • 可以给出表,视图或存储的程序名称数据库名称限定符。不合格和合格名称的例子创造陈述:

    CREATE TABLE mytable…CREATE VIEW myview…;CREATE PROCEDURE myproc…创建myfunc函数CREATE EVENT myevent…;mydb创建表。mytable…;mydb创建视图。myview…;mydb创建过程。myproc…;mydb创建函数。myfunc…;创建事件mydb。myevent…;
  • 触发器与表相关联,所以任何限定符都适用于表名:

    CREATE TRIGGER mytrigger…mytable……;CREATE TRIGGER mytrigger…mydb。mytable…;
  • 可以给出多个限定符,以指示引用它的语句中的上下文,如下表所示。

    列参考 意义
    col_name. col_name.来自语句中使用的任何表包含该名称的列
    tbl_name.col_name. col_name.从表格tbl_name默认数据库
    db_name.tbl_name.col_name. col_name.从表格tbl_name数据库的db_name.

    换句话说,可以给出列名称的列名限定符,它可以给出数据库名称限定符。不合格和合格列参考的示例选择陈述:

    从MyTable中选择C1,其中C2> 100;从MyTable中选择MyTable.c1,其中mytable.c2> 100;从mydb.mytable中选择mydb.mytable.c1其中mydb.mytable.c2> 100;

除非不合格的参考是暧昧的,否则您不需要在语句中指定对象引用的限定符。假设列C1.仅在表中发生T1.C2.只有在T2.,C在这两个T1.T2.。任何不合格的参考C在指出两个表的陈述中是暧昧的,并且必须合格为T1.c.T2.c.表示您的意思是哪个表:

从T1内连接T2选择C1,C2,T1.C,其中T2.c> 100;

类似地,从表中检索T.在数据库中db1从桌子上T.在数据库中db2在同一语句中,您必须有资格获得表引用:对于对这些表中的列引用,只需要在两个表中出现的列名所需的限定符。假设列C1.仅在表中发生db1.t.C2.只有在db2.t,C在这两个db1.t.db2.t。在这种情况下,C是模棱两可且必须限定但是C1.C2.不必是:

SELECT c1, c2, db1.t.c FROM db1。t INNER JOIN db2。T.WHERE db2.t.c > 100;

表别名使符合条件的列引用可以更简单地写:

SELECT c1, c2, t1.c FROM db1。db2. t AS t1 INNER JOIN db2. tT.AS t2 WHERE t2.c > 100;