KingbaseES V8 手册手册
目录目录
I. SQL 语言
1. SQL语法
2. 数据定义
3. 数据操纵
4. 查询
5. 数据类型
6. 伪列
7. 函数和操作符
8. 类型转换
9. 索引
10. 视图
11. 全文搜索
12. 扩展 SQL
II. 服务器编程
13. 触发器
14. 事件触发器
15. 规则系统
16. PL/SQL - SQL过程语言
17. 解析物理日志
III. 客户端编程
18. libkci - C 库
19. ESQL - C 中的嵌入式 SQL
20. ODBC指南
21. JDBC指南
22. Hibernate指南
23. MyBatis指南
24. Perl DBI指南
25. PHP PDO指南
26. 信息模式
IV. 数据库管理
27. 服务器设置和操作
28. 服务器配置
29. 客户端认证
30. 数据库角色
31. 管理数据库
32. 本地化
V. 高可用
33. 控制文件操作
34. 备份和恢复
35. 高可用、负载均衡和复制
36. 恢复配置
37. 逻辑同步
2/2328
38. 读写分离集群
VI. 性能调优
39. 数据快速加载
40. 性能提示
41. 并行查询
42. 数据分区方案
VII. 客户端工具
43. 数据库对象管理工具
44. 数据库部署工具
45. 逻辑同步工具
46. 控制台工具
47. 数据迁移工具
VIII. 数据集成
48. 外部数据
IX. 安全管理
49. 客户端认证
50. 用户管理
51. 数据访问控制
52. 数据访问保护
53. 数据安全传输
X. 监控
54. 监控数据库活动
55. 监控磁盘使用
56. 健康状态检查
XI. 附件
I. SQL 命令
II. KingbaseES 客户端应用
III. KingbaseES 服务器应用
IV. KingbaseES 系统视图
V. KingbaseES 错误代码
VI. SQL 关键词
索引
3/2328
I. SQL 语言语言
这部分描述在KingbaseES中SQL语言的使用。我们从描述SQL的一般语法开始,然后
解释如何创建保存数据的结构、如何填充数据库以及如何查询它。中间的部分列出了
在SQL命令中可用的数据类型和函数。剩余的部分则留给对于调优数据性能的重要方
面。
这部分的信息被组织成让一个新用户可以从头到尾跟随它来全面理解主题,而不需要多
次参考后面的内容。这些章都是自包含的,这样高级用户可以根据他们的选择阅读单独
的章。这一部分的信息被以一种叙事的风格展现。需要查看一个特定命令的完整描述的
读者应该去看看第 XI 部分。
这一部分的阅读者应该知道如何连接到一个KingbaseES数据库并且发出SQL命
令。SQL通常使用KingbaseES的交互式终端ksql输入,但是其他具有相似功能的程序
也可以被使用。
目录目录
1. SQL语法
1.1. 词法结构
1.2. 值表达式
1.3. 调用函数
2. 数据定义
2.1. 表基础
2.2. 默认值
2.3. 约束
2.4. 系统列
2.5. 修改表
2.6. 权限
2.7. 行安全性策略
2.8. 模式
2.9. 继承
2.10. 分区
2.11. 外部数据
2.12. 其他数据库对象
2.13. 依赖跟踪
3. 数据操纵
3.1. 插入数据
3.2. 更新数据
3.3. 删除数据
4. 查询
4.1. 概述
4.2. 表表达式
4.3. 选择列表
4.4. 组合查询
4.5. 行排序
4/2328
4.6. LIMIT 、 OFFSET 和 TOP
4.7. VALUES列表
4.8. WITH查询(公共表表达式)
5. 数据类型
5.1. 数值类型
5.2. 货币类型
5.3. 字符类型
5.4. 二进制数据类型
5.5. 日期/时间类型
5.6. 布尔类型
5.7. 枚举类型
5.8. 几何类型
5.9. 网络地址类型
5.10. 位串类型
5.11. 文本搜索类型
5.12. UUID类型
5.13. XML类型
5.14. JSON 类型
5.15. 数组
5.16. 组合类型
5.17. 范围类型
5.18. 抽象数据类型
5.19. 对象标识符类型
5.20. sys_lsn Type
5.21. 伪类型
6. 伪列
6.1. ROWNUM 伪列
6.2. 层次查询伪列
7. 函数和操作符
7.1. 逻辑操作符
7.2. 比较操作符
7.3. 层次查询操作符
7.4. 层次查询函数
7.5. 数学函数和操作符
7.6. 字符串函数和操作符
7.7. 二进制串函数和操作符
7.8. 位串函数和操作符
7.9. 模式匹配
7.10. 数据类型格式化函数
7.11. 时间/日期函数和操作符
7.12. 枚举支持函数
7.13. 几何函数和操作符
7.14. 网络地址函数和操作符
7.15. 文本搜索函数和操作符
7.16. XML 函数
7.17. JSON 函数和操作符
7.18. 序列操作函数
7.19. 条件表达式
5/2328
7.20. 数组函数和操作符
7.21. 范围函数和操作符
7.22. 聚集函数
7.23. 窗口函数
7.24. 子查询表达式
7.25. 行和数组比较
7.26. 集合返回函数
7.27. 系统信息函数
7.28. 系统管理函数
7.29. 触发器函数
7.30. 事件触发器函数
7.31. 其他函数
8. 类型转换
8.1. 概述
8.2. 操作符
8.3. 函数
8.4. 值存储
8.5. UNION、CASE和相关结构
8.6. 类型转换表
9. 索引
9.1. 简介
9.2. 索引类型
9.3. 多列索引
9.4. 索引和ORDER BY
9.5. 组合多个索引
9.6. 唯一索引
9.7. 表达式索引
9.8. 部分索引
9.9. 操作符类和操作符族
9.10. 索引和排序规则
9.11. 只用索引的扫描
9.12. 检查索引使用
10. 视图
10.1. 概述
10.2. 视图的状态
11. 全文搜索
11.1. 介绍
11.2. 表和索引
11.3. 空值文本搜索
11.4. 额外特性
11.5. 解析器
11.6. 词典
11.7. 配置例子
11.8. 测试和调试文本搜索
11.9. GIN 和 GiST 索引类型
11.10. ksql支持
6/2328
11.11. 限制
11.12. 从 8 之前的文本搜索迁移
12. 扩展 SQL
12.1. KingbaseES类型系统
12.2. 用户定义的函数
12.3. 查询语言(SQL)函数
12.4. 函数重载
12.5. 函数易变性分类
12.6. 过程语言函数
12.7. 内部函数
7/2328
章章 1. SQL语法语法
这一章描述了SQL的语法。它构成了理解后续具体介绍如何使用SQL定义和修改数据的
章节的基础 。
我们同时建议已经熟悉SQL的用户仔细阅读本章,因为本章包含一些在SQL数据库中实
现得不一致的以及KingbaseES中特有的规则和概念。
1.1. 词法结构
词法结构
SQL输入由一个命令序列组成。一个命令由一个记号的序列构成,并由一个分号(";")
终结。输入流的末端也会标志一个命令的结束。具体哪些记号是合法的与具体命令的语
法有关。
一个记号可以是一个关键词、一个标识符、一个带引号的标识符、一个literal(或常
量)或者一个特殊字符符号。记号通常以空白(空格、制表符、新行)来分隔,但在无
歧义时并不强制要求如此(唯一的例子是一个特殊字符紧挨着其他记号)。
例如,下面是一个(语法上)合法的SQL输入:
CREATE TABLE MY_TABLE(A INT, B TEXT);
SELECT * FROM MY_TABLE;
UPDATE MY_TABLE SET A = 5;
INSERT INTO MY_TABLE VALUES (3, 'hi there');
这是一个由三个命令组成的序列,每一行一个命令(尽管这不是必须地,在同一行中可
以有超过一个命令,而且命令还可以被跨行分割)。
另外,注释也可以出现在SQL输入中。它们不是记号,它们和空白完全一样。
根据标识命令、操作符、参数的记号不同,SQL的语法不很一致。最前面的一些记号通
常是命令名,因此在上面的例子中我们通常会说一个"SELECT"、一个"UPDATE"和一
个"INSERT"命令。但是例如UPDATE命令总是要求一个SET记号出现在一个特定位
置,而INSERT则要求一个VALUES来完成命令。每个命令的精确语法规则在第 XI 部
分中介绍。
1.1.1. 标识符和关键词
标识符和关键词
上例中的SELECT、UPDATE或VALUES记号是关键词的例子,即SQL语言中具有特定
意义的词。记号MY_TABLE和A则是标识符的例子。它们标识表、列或者其他数据库对
象的名字,取决于使用它们的命令。因此它们有时也被简称为"名字"。关键词和标识符
具有相同的词法结构,这意味着我们无法在没有语言知识的前提下区分一个标识符和关
键词。一个关键词的完整列表可以在Keywords中找到。
8/2328
SQL标识符和关键词必须以一个字母(a-z,也可以是带变音符的字母和非拉丁字母)
或一个下划线(_)开始。后续字符可以是字母、下划线(_)、数字(0-9)或美元符
号($)。注意根据SQL标准的字母规定,美元符号是不允许出现在标识符中的,因此
它们的使用可能会降低应用的可移植性。SQL标准不会定义包含数字或者以下划线开头
或结尾的关键词,因此这种形式的标识符不会与未来可能的标准扩展冲突 。
系统中一个标识符的长度不能超过 NAMEDATALEN-1 字节,在命令中可以写超过此长
度的标识符,但是它们会被截断。默认情况下,NAMEDATALEN 的值为64,因此标识
符的长度上限为63字节。如果这个限制有问题,可以
在src/include/sys_config_manual.h中修改 NAMEDATALEN 常量。
关键词和不被引号修饰的标识符是大小写不敏感的。因此:
UPDATE MY_TABLE SET A = 5;
可以等价地写成:
uPDaTE my_TabLE SeT a = 5;
一个常见的习惯是将关键词写成大写,而名称写成小写,例如:
UPDATE my_table SET a = 5;
这里还有第二种形式的标识符:受限标识符或被引号修饰的标识符。它是由双引号
(")包围的一个任意字符序列。一个受限标识符总是一个标识符而不会是一个关键
字。因此"select"可以用于引用一个名为"select"的列或者表,而一个没有引号修饰
的select则会被当作一个关键词,从而在本应使用表或列名的地方引起解析错误。在上
例中使用受限标识符的例子如下:
UPDATE "MY_TABLE" SET "A" = 5;
受限标识符可以包含任何字符,除了代码为0的字符(如果要包含一个双引号,则写两
个双引号)。这使得可以构建原本不被允许的表或列的名称,例如包含空格或花号的名
字。但是长度限制依然有效。
一种受限标识符的变体允许包括转义的用代码点标识的Unicode字符。这种变体
以U&(大写或小写U跟上一个花号)开始,后面紧跟双引号修饰的名称,两者之间没有
任何空白,如U&"foo"(注意这里与操作符&似乎有一些混淆,但是在&操作符周围使用
空白避免了这个问题) 。在引号内,Unicode字符可以以转义的形式指定:反斜线接上
4位16进制代码点号码或者反斜线和加号接上6位16进制代码点号码。例如,标识
符"data"可以写成:
9/2328