翻译:Identifier Name标识符命名规则

html { font-family: sans-serif }
body { margin: 0 }
article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary { display: block }
audio,canvas,progress,video { display: inline-block; vertical-align: baseline }
audio:not([controls]) { display: none; height: 0 }
[hidden],template { display: none }
a { background: transparent }
a:active,a:hover { outline: 0 }
abbr[title] { border-bottom: 1px dotted }
b,strong { font-weight: bold }
dfn { font-style: italic }
h1 { font-size: 2em; margin: 0.67em 0 }
mark { background: #ff0; color: #000 }
small { font-size: 80% }
sub,sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline }
sup { top: -0.5em }
sub { bottom: -0.25em }
img { border: 0 }
svg:not(:root) { overflow: hidden }
figure { margin: 1em 40px }
hr { height: 0 }
pre { overflow: auto }
code,kbd,pre,samp { font-family: monospace, monospace; font-size: 1em }
button,input,optgroup,select,textarea { color: inherit; font: inherit; margin: 0 }
button { overflow: visible }
button,select { text-transform: none }
button,html input[type="button"],input[type="reset"],input[type="submit"] { cursor: pointer }
button[disabled],html input[disabled] { cursor: default }
button::-moz-focus-inner,
input::-moz-focus-inner { border: 0; padding: 0 }
input { line-height: normal }
input[type="checkbox"],input[type="radio"] { padding: 0 }
input[type="number"]::-webkit-inner-spin-button,
input[type="number"]::-webkit-outer-spin-button { height: auto }
input[type="search"] { }
input[type="search"]::-webkit-search-cancel-button,
input[type="search"]::-webkit-search-decoration { }
fieldset { border: 1px solid #c0c0c0; margin: 0 2px; padding: 0.35em 0.625em 0.75em }
legend { border: 0; padding: 0 }
textarea { overflow: auto }
optgroup { font-weight: bold }
table { border-collapse: collapse; border-spacing: 0 }
td,th { padding: 0 }
* { }
*::before,*::after { }
html { font-size: 62.5% }
body { font-family: "Helvetica Neue", Helvetica, Arial, "Microsoft Yahei", sans-serif; font-size: 14px; line-height: 1.42857143; color: #333333 }
input,button,select,textarea { font-family: inherit; font-size: inherit; line-height: inherit }
a { color: #428bca; text-decoration: none }
a:hover,a:focus { color: #2a6496; text-decoration: underline }
a:focus { outline: 5px auto -webkit-focus-ring-color }
figure { margin: 0 }
img { vertical-align: middle }
.hljs { display: block; padding: 0.5em; color: #333; background: #f8f8f8 }
.hljs-comment,.hljs-template_comment,.diff .hljs-header,.hljs-javadoc { color: #998; font-style: italic }
.hljs-keyword,.css .rule .hljs-keyword,.hljs-winutils,.javascript .hljs-title,.nginx .hljs-title,.hljs-subst,.hljs-request,.hljs-status { color: #333; font-weight: bold }
.hljs-number,.hljs-hexcolor,.ruby .hljs-constant { color: #099 }
.hljs-string,.hljs-tag .hljs-value,.hljs-phpdoc,.tex .hljs-formula { color: #d14 }
.hljs-title,.hljs-id,.coffeescript .hljs-params,.scss .hljs-preprocessor { color: #900; font-weight: bold }
.javascript .hljs-title,.lisp .hljs-title,.clojure .hljs-title,.hljs-subst { font-weight: normal }
.hljs-class .hljs-title,.haskell .hljs-type,.vhdl .hljs-literal,.tex .hljs-command { color: #458; font-weight: bold }
.hljs-tag,.hljs-tag .hljs-title,.hljs-rules .hljs-property,.django .hljs-tag .hljs-keyword { color: #000080; font-weight: normal }
.hljs-attribute,.hljs-variable,.lisp .hljs-body { color: #008080 }
.hljs-regexp { color: #009926 }
.hljs-symbol,.ruby .hljs-symbol .hljs-string,.lisp .hljs-keyword,.tex .hljs-special,.hljs-prompt { color: #990073 }
.hljs-built_in,.lisp .hljs-title,.clojure .hljs-built_in { color: #0086b3 }
.hljs-preprocessor,.hljs-pragma,.hljs-pi,.hljs-doctype,.hljs-shebang,.hljs-cdata { color: #999; font-weight: bold }
.hljs-deletion { background: #fdd }
.hljs-addition { background: #dfd }
.diff .hljs-change { background: #0086b3 }
.hljs-chunk { color: #aaa }
#container { padding: 15px }
pre { border: 1px solid #ccc; display: block; background-color: #f8f8f8 }
pre code { white-space: pre-wrap }
.hljs,code { font-family: Monaco, Menlo, Consolas, "Courier New", monospace }
:not(pre)>code { padding: 2px 4px; font-size: 90%; color: #c7254e; background-color: #f9f2f4; white-space: nowrap }

本文为mariadb官方手册:Identifier Names的译文。

原文:https://mariadb.com/kb/en/library/identifier-names/
我提交到MariaDB官方手册的译文:https://mariadb.com/kb/zh-cn/library/identifier-names/

Identifier Names

数据库、表、索引、字段、别名、视图、存储过程、触发器、事件、变量分区、表空间、保存点、标签、用户、角色,都是常见的 标识符,它们都有特定的命名规则。

标识符可以使用反引号字符"`"引起来。将标识符使用引号引用是可选的,除非标识符中包含特殊字符或保留关键字。如果将SQL_MODE设置为ANSI_QUOTES,则双引号(")也可以用来引用标识符。

使用全名(fully qualified names)的时候无需引号引用标识符,即使名称中使用了保留关键字。例如,test.select只有一种解释,因此没有使用引号将保留字"select"包围时也能正确解析。

无需引用的情况

下面的字符都是有效的,它们不需要被引号引用:

  • ASCII: [0-9,a-z,A-Z$_] (数值0-9,大小写的拉丁字符,美元符号,下划线)
  • Extended: U+0080 .. U+FFFF

需要引用的情况

下面的字符是有效的,但是需要被引号引用:

  • ASCII: U+0001 .. U+007F (full Unicode Basic Multilingual Plane (BMP) except for U+0000)
  • Extended: U+0080 .. U+FFFF
  • 标识符自身也可以作为标识符的一部分,只要它们被引号引用即可。

其他命名规则

以下是标识符命名相关的其他规则:

  • 标识符以Unicode(UTF-8)格式存储。
  • 标识符可能会也可能不会区分大小写。见Indentifier Case-sensitivity
  • 数据库、表和字段名称不能以空白字符结尾。
  • 标识符名称可以以数值开头,但不能只包含数值,除非使用引号引用。
  • 以数值开头且后面跟字符"e"的标识符,需要使用引号引用,它们会被解析为浮点数值。
  • 标识符中不允许包含ASCII NUL(U+0000)字符和增补字符(U+10000或更大的值)。
  • 允许使用类似5e6、9e这样的标识符,但强烈建议不要使用它们,因为在特定的上下文中,它们会产生歧义而被当作一个数值或表达式。
  • 用户变量不能作为标识符的一部分,也不能直接作为SQL语句中的标识符。

引用字符

普通的引用字符使用的是反引号"`",但如果设置SQL_MODE为ANSI_QUOTES,则双引号(")也可作为引用字符。

反引号可以作为标识符的一部分,但此时它需要被引用起来。引用字符可以是反引号,但这种情况下,反引号必须使用另一个反引号进行转义。

最大长度

  • Databases, tables, columns, indexes, constraints, stored routines, triggers, events, views, tablespaces, servers和log file groups 最大允许64个字符。
  • 组合语句标签最大允许16个字符。
  • 别名最大允许256个字符。但CREATE VIEW语句中的字段别名最大允许64个字符(而非最大别名长度256字符)。
  • Users最大长度80个字符。
  • Roles最大长度128个字符。
  • 多字节字符不会计算超出字符长度限制之外的字符。

组合标识符

MariaDB允许使用单个字段名称来引用某个字段,只要它不会产生歧义,或者为字段指定表名,再或者加上数据库名使用3段标识符的方式来引用字段。使用句点(.)分隔各标识符,分隔符句点(.)前后可以包含空格(制表符、换行符)。

示例

使用句点分隔各标识符:

CREATE TABLE t1 (i int);

INSERT INTO t1(i) VALUES (10);

SELECT i FROM t1;
+------+
| i    |
+------+
|   10 |
+------+

SELECT t1.i FROM t1;
+------+
| i    |
+------+
|   10 |
+------+

SELECT test.t1.i FROM t1;
+------+
| i    |
+------+
|   10 |
+------+

句点可以被空格分隔:

SELECT test . t1 . i FROM t1;
+------+
| i    |
+------+
|   10 |
+------+

解决歧义:

CREATE TABLE t2 (i int);

SELECT i FROM t1 LEFT JOIN t2 ON t1.i=t2.i;
ERROR 1052 (23000): Column ‘i‘ in field list is ambiguous

SELECT t1.i FROM t1 LEFT JOIN t2 ON t1.i=t2.i;
+------+
| i    |
+------+
|   10 |
+------+

创建一个需要被引号引用的表:

CREATE TABLE 123% (i int);
ERROR 1064 (42000): You have an error in your SQL syntax;
  check the manual that corresponds to your MariaDB server version for the right syntax
  to use near ‘123% (i int)‘ at line 1

CREATE TABLE `123%` (i int);
Query OK, 0 rows affected (0.85 sec)

CREATE TABLE `TABLE` (i int);
Query OK, 0 rows affected (0.36 sec)

使用双引号作为引用字符:

CREATE TABLE "SELECT" (i int);
ERROR 1064 (42000): You have an error in your SQL syntax;
  check the manual that corresponds to your MariaDB server version for the right syntax
  to use near ‘"SELECT" (i int)‘ at line 1

SET sql_mode=‘ANSI_QUOTES‘;
Query OK, 0 rows affected (0.03 sec)

CREATE TABLE "SELECT" (i int);
Query OK, 0 rows affected (0.46 sec)

将引用符号作为标识符名称的一部分:

SHOW VARIABLES LIKE ‘sql_mode‘;
+---------------+-------------+
| Variable_name | Value       |
+---------------+-------------+
| sql_mode      | ANSI_QUOTES |
+---------------+-------------+

CREATE TABLE "fg`d" (i int);
Query OK, 0 rows affected (0.34 sec)

创建名为"*"的表(Unicode number: U+002A),它需要被引用起来。

CREATE TABLE `*` (a INT);

浮点数歧义:

CREATE TABLE 8984444cce5d (x INT);
Query OK, 0 rows affected (0.38 sec)

CREATE TABLE 8981e56cce5d (x INT);
ERROR 1064 (42000): You have an error in your SQL syntax;
  check the manual that corresponds to your MariaDB server version for the right syntax
  to use near ‘8981e56cce5d (x INT)‘ at line 1

CREATE TABLE `8981e56cce5d` (x INT);
Query OK, 0 rows affected (0.39 sec)

回到Linux系列文章大纲:http://www.cnblogs.com/f-ck-need-u/p/7048359.html

回到数据库系列文章大纲:http://www.cnblogs.com/f-ck-need-u/p/7586194.html

转载请注明出处:http://www.cnblogs.com/f-ck-need-u/p/7597849.html

注:若您觉得这篇文章还不错请点击右下角推荐,您的支持能激发作者更大的写作热情,非常感谢!

时间: 2024-10-01 20:37:06

翻译:Identifier Name标识符命名规则的相关文章

JavaScript标识符--------命名规则及其保留字

JavaScript的两种注释格式: 1. //这里是单行注释 2. /*这里是一段注释*/ 3. /*这里是 *多行注释 */ 标识符命名: 标识符,通俗的讲就是一个名字,可以用来对变量和函数进行命名,例如: 命名变量名: var luckname='weille'; //=>luckname就是这个变量luckname的标识符 命名函数名: function facename() { //=>facename就是这个函数facename的标识符 } 命名规则: 1.必须要以字母.下划线(_

Java第二天——标识符命名规则、Java的知识、快捷键的使用、Scanner获取值的常用方法

1.标识符命名规则 字母.下划线.数字.美元符号($)由这四个部分组成. 标识符=首字母+其他 首字母:字母.下划线.美元符号($) 其他:字母.下划线.数字.美元符号($) 注意: 1.首字母不能为数字 2.标识符不能是关键字 3.java语言严格区分大小写,比如:$name $Name表示两个不同的标识符 2.java程序的注释: 单行注释(//).多行注释(/**/).文档(doc)注释 单行注释:一般用于对每一行代码进行说明 多行注释:一般用于对每一段代码.某个方法.某个源文件进行解释说

python学习笔记(01):python和c语言 标识符命名规则比较

python标识符命名规则:标识符的第一个字符必须是字母表中的字母(大写或小写)或者一个下划线(‘ _ ’).标识符名称的其他部分可以由字母(大写或小写).下划线(‘ _ ’)或数字(0-9)组成.标识符名称是对大小写敏感的.例如,myname和myName不是一个标识符.注意前者中的小写n和后者中的大写N.有效 标识符名称的例子有i.__my_name.name_23和a1b2_c3.无效 标识符名称的例子有2things.this is spaced out和my-name. c语言标识符命

2.6 C#的标识符命名规则

C#标识符的命名规则 程序中的变量名.常量名.类名.方法名,都叫做标识符.C#有一套标识符的命名规则,如果命名时不遵守规则,就会出错.这套规则简单说有下面三条: ①标识符只能由英文字母.数字和下划线组成,不能包含空格和其他字符. 错误的标识符声明:string $user; //错在使用了其他字符 ②变量名不能用数字开头. 错误的标识符声明:double 6h;//错在用数字开头 ③不能用关键字当变量名. 错误的标识符声明:char static ;//错在用关键字static做变量名

标识符命名规则

顾名思义,“命名规则”指的是为标识符起名字时遵循的规则.标识符主要包括变量名.函数名.类名和宏名. 三种主流命名法:骆驼(Camel)命名法,帕斯卡(Pascal)命名法和匈牙利命名法. 个人习惯,一般情况使用骆驼命名法,类名对象名使用帕斯卡. 数据库表名 统一全部小写中间用"_"分隔 例如 "cps_user",字段名全部小写可以用"_"分隔,或者不用. 骆驼(Camel)命名法近年来越来越流行,在许多新的函数库和Java这样的平台下使用得当相

JAVA初学者——标识符命名规则及数据类型的转换

Hello!我是浩宇大熊猫~ 直接进入正题吧~ 1)标识符的命名规则. 标识符命名法有小驼峰命名法和大驼峰命名法两种,分别应用于方法.变量和类. 小驼峰命名法应用于方法和变量,主要有两个约定: 1.标识符是一个单词的时候,首字母小写: 2.标识符由多个单词组成的时候,第一个单词首字母小写,其他单词首字母大写: 大驼峰命名法应用于类,也有两个约定: 1.标识符是一个单词的时候,首字母大写: 2.标识符由多个单词组成的时候,每个单词的首字母大写: 2)标识符的定义规则. 1.由数字.字母.下划线(_

java标识符命名规则

1.标识符可以有数字.字母.下划线.美元符号$组成.但是不能由数字开头. 2.标识符不能是java关键字和保留字. 3.标识符严格区分大小写. 4.标识符的命名最好能反映出其作用,做到见名知意.

JAVA基础篇NO1--环境变量的配置及命名规则

标签(空格分隔): java基础 一:计算机概述 计算机:硬件和软件 硬件:控制器 运算器 存储器 输入和输出设备       存储器:外存(硬盘) 内存 软件:系统软件 应用软件   系统软件:windows Linux DOS IOS Android Unix macOS           裸机:没有安装操作系统   应用软件:QQ Office MD web APP 二:软件开发与计算机语言 什么是软件?按照特定的组织顺序的数据和指令的集合 计算语言分类 :机器语言(二进制0和1) 汇编

Java的书写格式,标识符及命名规则,注释

1.Java语言的书写格式(约定成俗) 1) 大括号要对齐(左大括号与句尾对其,后面大括号与句头对齐),并且成对写 2) 左大括号前面有空格 3) 遇到左大括号要缩进(下一行要缩进一下),Tab.没有遇到不用缩进,对齐就行 4) 方法和程序块之间加空行让程序看起来清晰 5) 并排语句之间加空格,例如for语句 6) 运算符两侧加空格3 + 4 = 7 2.标识符 1) 标识符:就是给类,接口,方法,变量等起名字时使用的字符序列 2) 标识符的组成: a.英文大小写字母 b.数字字符 c.$和_