美文网首页人民广场
PostgreSQL基础知识--关键字,标识符,常量

PostgreSQL基础知识--关键字,标识符,常量

作者: Amy1234567 | 来源:发表于2021-04-16 16:42 被阅读0次

-------------------------以下资料来源于PostgreSQL 12.2 版本在线手册 (中文版本)------------------------------

关键字和标识符

1. 定义:

关键字:SQL语言中具有特定意义的词。

标识符:标识表、列或者其他数据库对象的名字,取决于使用它们的命令。

2. 命名规则:

SQL关键字和标识符必须以一个字母(a-z, 也可以是带音符的字母和非拉丁字母)或一个下划线(_)开始。后续字符可以是字母,下划线(_),数字(0-9),或美元符号($)。

注意根据SQL标准的字母规定,美元符号是不允许出现在标识符中的,因此他们的使用可能会降低应用的可移植性。

SQL标准不会定义包含数字或者以下划线开头或结尾的关键词,因此这种形式的标识符不会与未来可能的标准扩展冲突。

系统中一个标识符的长度不能超过 NAMEDATALEN-1 字节,在命令中可以写超过此长度的标识符,但它们会被截断。

默认情况下,NAMEDATALEN 的值为64,因此标识符的长度上限为63字节。如果这个限制有问题,可以在src/include/pg_config_manual.h中修改

3. 关键词和不被引号修饰的标识符是大小写不敏感的。

4. 还有第二种形式的标识符:受限标识或被引号修饰的标识符。

它是由双引号(")包围的一个任意字符序列。一个受限标识符总是一个标识符而不会是一个关键字。

因此"select"可以引用一个名为"select"的列或者表,而一个没有引号修饰的select则会被当做一个关键字。

my test

5. 受限标识符--Unicode字符:

受限标识符可以包含任何字符,除了代码为0的字符(如果要包含一个双引号,则写两个单引号)。

这使得可以构建原本不被允许的列或表的名称,例如包含空格或花号的名字。但是长度限制依然有效。

一种受限标识符的变体允许包括转移的用代码点标识的Unicode字符。这种变体以U&(大写或小写U跟上一个花号)开始,后面紧跟

双引号修饰的名称,两者之间没有任何空白,如U&"foo"。

在引号内,Unicode字符可以以转义的形式指定:反斜线接上4位16进制代码点号码或者反斜线和加号接上6位16进制代码点号码。例如,标识符"data"可以写成:

my test

如果希望使用其他转义字符来代替反斜线,可以在字符串后使用UESCAPE子句,例如:

my test


常量

在PostgreSQL中有三种隐式类型常量:字符串,位串,数字。常量也可以被指定显示类型,这可以使得它被更精确地展示以及更有效的处理。

1. 字符串常量

在SQL中,一个字符串常量是一个由单引号(')包围的任意字符序列,例如'This is a string'。为了在一个字符串中包括一个单引号,可以写两个相连的单引号,例如'Dianne''s horse'。

两个只由空白及至少一个新行分隔的字符串常量会被连接在一起,并且将作为一个写在一起的字符串常量来对待。例如:

my test

2. C风格转义的字符串常量

PostgreSQL也接受“转义”字符串常量,这也是SQL标准的一个扩展。一个转义字符串常量可以通过在开单引号前面写一个字母E(大写或小写形式)来指定,例如E'foo'(当一个转义字符串常量跨行时,只在第一个开引号之前写E)。

在一个转义字符串内部,一个反斜线字符(\)会开始一个 C 风格的反斜线转义序列,在其中反斜线和后续字符的组合表示一个特殊的字节值。

手册 my test my test

只有当服务器编码是UTF8时,Unicode 转义语法才能完全工作。当使用其他服务器编码时,只有在 ASCII 范围(低于\u007F)内的代码点能够被指定。4 位和 8 位形式都能被用来指定 UTF-16 代理对,用来组成代码点超过 U+FFFF 的字符,不过 8 位形式的可用从技术上使得这种做法不再是必须的(当服务器编码为UTF8并使用代理对时,它们首先被结合到一个单一代码点,然后会被用 UTF-8 编码)。

3. 美元引用的字符串常量

虽然用于指定字符串常量的标准语法通常都很方便,但是当字符串中包含了很多单引号活反斜线时很难理解,因为每一个都需要被双写。

要在这种情况下允许可读性更好的查询,postgreslql提供了另一种被称为“美元引用”的方式来书写字符串常量。一个美元引用的字符串常量由一个美元符号($),

一个可选的另个或更多字符的"标签",另一个美元符号,一个构成字符串内容得任意字符序列,一个美元符号,开始这个美元引用的相同标签和一个美元符号组成。

my test my test

标签是大小写敏感的.

注意在美元引用字符串中,单引号可以在不被转义的情况下使用。事实上,在一个美元引用字符串中不需要对字符进行转义:字符串内容总是按其字面意思写出。

反斜线不是特殊的,并且美元符号也不是特殊的,除非它们是匹配开标签的一个序列的一部分。

4. 位串常量

位串常量看起来像常规字符串常量在开引号之前(中间无空白)加了一个B(小写或者大写),例如B'1001'。位串常量中允许的字符只有0和1。

作为一种选择,位串常量可以用十六进制号发指定,使用一个前导X(小写或大写),例如X'1FF'。这种记号法等价于一个用四个二进制取代每个十六进制的位串常量。

两种形式的位串常量可以以常规字符串常量相同的方式跨行继续,美元引用不能被用在位串常量中。

my test

5. 数字常量

如果使用了小数点,在小数点前面或者后面必须至少有一个数字。如果存在一个指示标记(e),在其后必须跟着至少一个数字。

在该常量终不能嵌入任何空白或其他字符,注意任何前导的加号或者减号并不实际被考虑为常量的一部分,它是一个应用到该常量的操作符

如果一个不包含小数点和指数的数字常量的值适合类型integer(21位),它首先被假定为类型integer。否则如果它的值适合类型bigint(64位),它被假定类型为bigint。

再否则它会被取做类型numberic。包含小数点和/或者指数的常数总是首先被假定为类型numberic。

一个数字常量初始指派的数据类型只是类型转换算法的一个开始点。在大部分情况中,常量将被根据上下文自动被强制到最合适的类型。必要时,你可以通过造型它来强制一个数字值被解释为一种指定数据类型。

my test


相关文章

网友评论

    本文标题:PostgreSQL基础知识--关键字,标识符,常量

    本文链接:https://www.haomeiwen.com/subject/qqkelltx.html