基础篇!MySQL的标识符语法、命名规则、大小写规则

MySQL 专栏收录该内容
52 篇文章 3 订阅

一、MySQL的标识符语法、命名规则

  • MySQL的标识符必须遵循以下几条规则

标识符里的字符要合法

  • 不加引号的标识符可以由大小写形式的字母a-z、数字0-9、美元符号、下划线,以及范围在U+0080到U+FFFF之间的Unicode扩展字符构成。
  • 标识符的第一个字符可以是标识符所允许的任何一种字符,其中包括数字。
  • 不过,不加引号的标识符不允许完全由数字字符构成
    • 因为那样会使它难以与数字区分开来。MySQL支持标识符以数字字符开头的做法,在各类数据库系统中并不常见。
    • 如果想要使用这样的标识符,那么必须特别留意它是否还包含了一个“E”或“e”字符,因为这种组合很容易导致表达式出现歧义。
    • 例如,表达式23e + 14(在“+”号的两边都有空格)表示的是列23e加上数字14,那么23e+14又该如何解释呢 ?它表示的是同一件事,还是一个用科学计数法表示的数字呢?
  • 标识符可以用反引号“`”引起来,它支持使用除NULL字节和Unicode补充字符(范围在U+10000及以上)以外的任何字符:
    • 如果标识符是SQL保留字,或者包含有空格或其他特殊字符,那么引号就会很有用
    • 为标识符加上引号 ,可以让它完全由数字字符构成;这一点对不加引号的标识符来说是不允许的。
    • 如果想在一个加上引号的标识符里使用标识符的引号字符,那么只需把重复一下即可。
CREATE TABLE `my table` (
    `my-int-column` INT
);
  • 对于数据库名和表名这样的标识符,操作系统可能会有其他的一些限制。更多相关信息在后面介绍"数据目录结构"时会讲解。
  • 列名和表名的别名没什么限制。如果要使用的别名是SQL保留字,或者完全由数字构成,或者包含空格或其他特殊字符,那么应该用标识符引号把它引起来。列的别名还可以使用单引号或双引号。

服务器的SQL模式

  • 如果启用了SQL的ANSI_QUOTES模式,那么可以使用双引号将标识符引起来(也可以使用反引号),例如:

CREATE TABLE "my table"(
    "my-int-column" INT
);
  • 启用ANSI_QUOTES会有副作用,即字符串文字量必须使用单引号引起来。如果使用了双引号 ,那么服务器会将这个值解释为标识符,而不会把它当作一个字符串。
  • 内建函数的名字通常都不是保留字,因此可以不加引号直接将其用作标识符。不过,如果启用了 SQL的IGNORE_SPACE模式,那么函数名就会变成保留字。这时,如果想要把它们当作标识符,则必须使用引号将它们引起来 。

标识符的长度

  • 大部分标识符的最大长度是64字符。别名的最大长度是256个字符

标识符的限定符

  • 根据具体的上下文,标识符可能需要加以限定,以明确它所引用的是什么内容。如果想要引用数据库,那么只需直接指定其名字即可:

USE db_name;
SHOW TABLES FROM dn_name;
  • 如果想要引用表,则有两种选择:

    • 使用一个完全限定的表名,即用数据库标识符和表标识符共同指定(下面代码段1所示)
    • 表标识符自己可以引用默认(当前)数据库里的表。例如sampdb是默认数据库,那么下面代码段2所示的两条语句是等效的
SHOW COLUMNS FROM db_name.tbl_name;
SELECT * FROM db_name tbl_name;
SHOW * FROM member;
SHOW * FROM sampdb.member;
  • 如果没有选择数据库,那么在没有给出数据库限定符的情况下引用某个表,就会出现错误;因为还不知道这个表到底属于哪个数据库。
  • 表名加上限定符的原因同样适用于视图(它们是“虚拟 ”表)和存储程序的名字。
  • 对于表列的引用,有如下3种选择:
    • 使用完全限定的列名:dn_name.tbl_name.col_name
    • 对于默认数据库中命名表里的某一个列,可以使用部分限定名:tbl_name.col_name
    • 只简单地写一个无限定名来引用具体环境上下文所确定的那个表:下面两条查询语句都使用了相同的列名,但每条语句的FROM子句所提供的上下文会指出,实 际应该选择哪个表里的列:
SELECT last_name, first_name FROM president;
SELECT last_name, first_name FROM member;
  • 如果在引用一个完全限定名时使用了引号,那么需要给该名字里的每一个标识符分别加上引号。例如:
SELECT * FROM `sampdb`.`member` WHERE `sampdb`,`member`,`member_id`>100;
  • 不要把这种名字当作一个整体用引号引起来。下面这条语句是不正确的:
SELECT * FROM `sampdb.member` WHERE `sampdb`,`member`,`member_id`>100;
  • 如果需要把某个保留字用作标识符,那么必须给它加上引号。不过当这个保留字紧跟在一个句号 限定符后面时,则不能这样做,因为这时的上下文已说明这个保留字其实就是一个标识符。

二、SQL语句大小写规范

  • SQL语句中的大小写规则因语句各个组成元素的不同而有所差异,同时还取决于你正引用的内容和MySQL服务器主机所运行的操作系统。

SQL关键字和函数名

  • SQL的那些关键字和函数名不区分大小写。它们可以为任意的大小写组合。
  • 例如,下面的语句都是等价的:
SELECT NOW();
SELECT now();
SELECT nOw();

数据库名、表名和视图名

  • MySQL使用了服务器主机上的底层文件系统所包含的目录和文件来表示数据库和表。因此,库 名和表名的默认大小写取决于服务器主机上的操作系统在文件名方面的规定:
    • Windows系统的文件名不区分大小写,所以运行在它上面的MySQL服务器也不区分库名和表名的大小写。
    • 而运行于Unix主机上的MySQL服务器,通常需要区分库名和表名的大小写,因为Unix文件系统区分大小写。
    • 对于MacOSX平台,其扩展文件系统中的名字是个例外,它们不区分大小写。
  • 例如,下面是在Linux操作系统下的MySQL,我们选择DEMO数据库失败

  • MySQL会使用一个文件来表示一个视图,所以刚才与表有关的讨论也同样适用于视图 。

存储程序的名字

  • 存储函数、存储过程和事件的名字都不区分大小写
  • 触发器的名字要区分大小写,这一点与标准SQL的行为有所不同。

列名和索引名

  • 在MySQL里,列名和索引名都不区分大小写
  • 下面这些语句都是等价的:
SELECT name FROM student;
SELECT NAME FROM student;
SELECT nAme FROM student;

别名的名字

  • 默认情况下,表的别名要区分大小写。可以使用任意的大小写组合(大写、小写或大小写混用)来指定一个别名。但如果需要在同一条语句里多次用到同一个别名,则必须让它们保持同样的大小写组合
  • 如果lower_case_table_names系统变量为非零值 ,那么表的别名将不区分大小写。

字符串值

  • 字符串值是否区分大小写,具体取决于它是二进制还是非二进制串,并且对于非二进制串,还取决于字符集的排序规则(collation)。对于文字串和字符串类型列的内容,这一点也同样成立。更多相关信息请参考https://dongshao.blog.csdn.net/article/details/87366045
  • 当你在一台文件名区分大小写的机器上创建数据库和表时,应该要认真考虑一下大小写的问题,如“它们以后是否有可能会迁移到一台不区分文件名大小写的机器上”。
  • 想要避免大小写问题演变成一个棘手难题,可行的办法是:先选定一种大小写方案,然后一直按照该方案去创建数据库 和表。个人建议统一使用小写字母,尤其是,如果你要使用InnoDB表的话,因为InnoDB引擎在其内部都是以小写字母方式来存储数据库名和表名的。
  • 如果想统一使用小写字母来创建数据库名和表名,即使在CREATE语句里没有特意指定, 也想要这样的效果,那么可以通过设置lower_case_table_name系统变量来配置服务器。在后面介绍"数据目录结构"时会讲解。
  • 1
    点赞
  • 0
    评论
  • 5
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

《php和mysql web开发(原书第4版)》:开发人员专业技术丛书。 目录 读者反馈 译者序 前言 作者简介 第一 使用PHP 第1章 PHP快速入门教程 1.1 开始之前:了解PHP 1.2 创建一个示例应用:Bob汽车零部件商店 1.2.1 创建订单表单 1.2.2 表单处理 1.3 在HTML中嵌入PHP 1.3.1 使用PHP标记 1.3.2 PHP语句 1.3.3 空格 1.3.4 注释 1.4 添加动态内容 1.4.1 调用函数 1.4.2 使用date()函数 1.5 访问表单变量 1.5.1 简短中等以及长风格表单变量 1.5.2 字符串连接 1.5.3 变量和文本 1.6 理解标识符 1.7 检查变量类型 1.7.1 PHP数据类型 1.7.2 类型强度 1.7.3 类型转换 1.7.4 可变变量 1.8 声明和使用常量 1.9 理解变量作用域 1.10 使用操作符 1.10.1 算术操作符 1.10.2 字符串操作符 1.10.3 赋值操作符 1.10.4 比较操作符 1.10.5 逻辑操作符 1.10.6 位操作符 1.10.7 其他操作符 1.11 计算表单总金额 1.12 理解操作符优先级和结合性: 1.13 使用可变函数 1.13.1 测试和设置变量类型 1.13.2 测试变量状态 1.13.3 变量重解释 1.14 根据条件进行决策 1.14.1 if语句 1.14.2 代码块 1.14.3 else语句 1.14.4 elseif语句 1.14.5 switch语句 1.14.6 比较不同条件 1.15 通过迭代实现重复动作 1.15.1 while循环 1.15.2 for和foreach循环 1.15.3 do...while循环 1.16 从控制结构或脚本中跳出 1.17 使用可替换控制结构语法 1.18 使用declare 1.19 下一章 第2章 数据存储与检索 2.1 保存数据以便后期使用 2.2 存储和检索Bob订单 2.3 文件处理 2.4 打开文件 2.4.1 选择文件模式 2.4.2 使用fopen()打开文件 2.4.3 通过FTP或HTTP打开文件 2.4.4 解决打开文件时可能遇到问题 2.5 写文件 2.5.1 fwrite()参数 2.5.2 文件格式 2.6 关闭文件 2.7 读文件 2.7.1 以只读模式打开文件:fopen() 2.7.2 知道何时读完文件:feof() 2.7.3 每次读取一行数据:fgets()fgetss()和fgetcsv() 2.7.4 读取整个文件:readfile()fpassthru()和file() 2.7.5 读取一个字符:fgetc() 2.7.6 读取任意长度:fread() 2.8 使用其他有用文件函数 2.8.1 查看文件是否存在:file_exists() 2.8.2 确定文件大小:filesize() 2.8.3 删除一个文件:unlink() 2.8.4 在文件中定位:rewind()fseek()和ftell() 2.9 文件锁定 2.10 更好方式:数据库管理系统 2.10.1 使用普通文件几个问题 2.10.2 RDBMS是如何解决这些问题 2.11 进一步学习 2.12 下一章 第3章 使用数组 3.1 什么是数组 3.2 数字索引数组 3.2.1 数字索引数组初始化 3.2.2 访问数组内容 3.2.3 使用循环访问数组 3.3 使用不同索引数组 3.3.1 初始化相关数组 3.3.2 访问数组元素 3.3.3 使用循环语句 3.4 数组操作符 3.5 多维数组 3.6 数组排序 3.6.1 使用sort()函数 3.6.2 使用asort()函数和ksort()函数对相关数组排序 3.6.3 反向排序 3.7 多维数组排序 3.7.1 用户定义排序 3.7.2 反向用户排序 3.8 对数组进行重新排序 3.8.1 使用shuffle()函数 3.8.2 使用array_reverse()函数 3.9 从文件载入数组 3.10 执行其他数组操作 3.10.1 在数组中浏览:each()current()reset()end()next()pos()和prev() 3.10.2 对数组每一个元素应用任何函数:array_walk() 3.10.3 统计数组元素个数:count()sizeof()和array_count_
相关推荐
©️2020 CSDN 皮肤主题: 护眼 设计师:闪电赇 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值