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输入中。它们不是记号,它们和空白完全一样。
2.1. 表基础
关系型数据库中的一个表非常像纸上的一张表:它由行和列组成。列的数量和顺序是固定的,并且每一列拥有一个名字。行的数目是变化的,它反映了在一个给定时刻表中存储的数据量。SQL并不保证表中行的顺序。当一个表被读取时,表中的行将以非特定顺序出现,除非明确地指定需要排序。这些将在第 4 章介绍。此外,SQL不会为行分配唯一的标识符,因此在一个表中可能会存在一些完全相同的行。这是SQL之下的数学模型导致的结果,但并不是所期望的。稍后在本章中我们将看到如何处理这种问题。
每一列都有一个数据类型。数据类型约束着一组可以分配给列的可能值,并且它为列中存储的数据赋予了语义,这样它可以用于计算。例如,一个被声明为数值类型的列将不会接受任何文本串,而存储在这样一列中的数据可以用来进行数学计算。反过来,一个被声明为字符串类型的列将接受几乎任何一种的数据,它可以进行如字符串连接的操作但不允许进行数学计算。
KingbaseES包括了相当多的内建数据类型,可以适用于很多应用。用户也可以定义他们自己的数据类型。大部分内建数据类型有着显而易见的名称和语义,所以我们将它们的详细解释放在第 5 章中。一些常用的数据类型是:用于整数的integer;可以用于分数的numeric;用于字符串的text,用于日期的date,用于一天内时间的time以及可以同时包含日期和时间的timestamp。
I. SQL 命令
这部分包含KingbaseES支持的SQL命令的参考信息。每条命令的标准符合和兼容的信息可以在相关的附件页中找到。
- 目录
- ABORT -- 中止当前事务
- ALTER AGGREGATE -- 更改一个聚集函数的定义
- ALTER COLLATION -- 更改一个排序规则的定义
- ALTER CONVERSION -- 改变一个转换的定义
- ALTER DATABASE -- 更改一个数据库
- ALTER DEFAULT PRIVILEGES -- 定义默认访问特权
- ALTER DOMAIN -- 更改一个域的定义
- ALTER EVENT TRIGGER -- 更改一个事件触发器的定义
- ALTER EXTENSION -- 更改一个扩展的定义
- ALTER FOREIGN DATA WRAPPER -- 更改一个外部数据包装器的定义
- ALTER FOREIGN TABLE -- 更改一个外部表的定义
- ALTER FUNCTION -- 更改一个函数的定义
- ALTER GROUP -- 更改角色名称或者成员关系
- ALTER INDEX -- 更改一个索引的定义
- ALTER LANGUAGE -- 更改一种过程语言的定义
- ALTER LARGE OBJECT -- 更改一个大对象的定义
- ALTER MATERIALIZED VIEW -- 更改一个物化视图的定义
- ALTER OPERATOR -- 更改一个操作符的定义
- ALTER OPERATOR CLASS -- 更改一个操作符类的定义
- ALTER OPERATOR FAMILY -- 更改一个操作符族的定义
- ALTER POLICY -- 更改一条行级安全性策略的定义
- ALTER PROCEDURE -- 重命名一个存储过程
- ALTER ROLE -- 更改一个数据库角色
- ALTER RULE -- 更改一个规则定义
- ALTER SCHEMA -- 更改一个模式的定义
- ALTER SEQUENCE -- 更改一个序列发生器的定义
- ALTER SERVER -- 更改一个外部服务器的定义
- ALTER SYSTEM -- 更改一个服务器配置参数
- ALTER TABLE -- 更改一个表的定义
- ALTER TABLESPACE -- 更改一个表空间的定义
- ALTER TEXT SEARCH CONFIGURATION -- 更改一个文本搜索配置的定义
- ALTER TEXT SEARCH DICTIONARY -- 更改一个文本搜索字典的定义
- ALTER TEXT SEARCH PARSER -- 更改一个文本搜索解析器的定义
- ALTER TEXT SEARCH TEMPLATE -- 更改一个文本搜索模板的定义
- ALTER TRIGGER -- 更改一个触发器的定义
- ALTER TYPE -- 更改一个类型的定义
- ALTER USER -- 更改一个数据库角色
- ALTER USER MAPPING -- 更改一个用户映射的定义
- ALTER VIEW -- 更改一个视图的定义
- ANALYZE -- 收集有关一个数据库的统计信息
- BEGIN -- 开始一个事务块
- CHECKPOINT -- 强制一个事务日志检查点
- CLOSE -- 关闭一个游标
- CLUSTER -- 根据一个索引聚簇一个表
- COMMENT -- 定义或者更改一个对象的注释
- COMMIT -- 提交当前事务
- COMMIT PREPARED -- 提交一个早前为两阶段提交预备的事务
- COPY -- 在一个文件和一个表之间复制数据
- CREATE ACCESS METHOD -- 定义一种新的访问方法
- CREATE AGGREGATE -- 定义一个新的聚集函数
- CREATE CAST -- 定义一种新的转换
- CREATE COLLATION -- 定义一种新排序规则
- CREATE CONVERSION -- 定义一种新的编码转换
- CREATE DATABASE -- 创建一个新数据库
- CREATE DOMAIN -- 定义一个新的域
- CREATE EVENT TRIGGER -- 定义一个新的事件触发器
- CREATE EXTENSION -- 安装一个扩展
- CREATE FOREIGN DATA WRAPPER -- 定义一个新的外部数据包装器
- CREATE FOREIGN TABLE -- 定义一个新的外部表
- CREATE FUNCTION -- 定义一个新函数
- CREATE GROUP -- 定义一个新的数据库角色
- CREATE INDEX -- 定义一个新索引
- CREATE LANGUAGE -- 定义一种新的过程语言
- CREATE MATERIALIZED VIEW -- 定义一个新的物化视图
- CREATE OPERATOR -- 定义一个新的操作符
- CREATE OPERATOR CLASS -- 定义一个新的操作符类
- CREATE OPERATOR FAMILY -- 定义一个新的操作符族
- CREATE POLICY -- 为一个表定义一条新的行级安全性策略
- CREATE PROCEDURE -- 创建一个存储过程
- CREATE ROLE -- 定义一个新的数据库角色
- CREATE RULE -- 定义一条新的重写规则
- CREATE SCHEMA -- 定义一个新模式
- CREATE SEQUENCE -- 定义一个新的序列发生器
- CREATE SERVER -- 定义一个新的外部服务器
- CREATE TABLE -- 定义一个新表
- CREATE TABLE AS -- 从一个查询的结果创建一个新表
- CREATE TABLESPACE -- 定义一个新的表空间
- CREATE TEXT SEARCH CONFIGURATION -- 定义一个新的文本搜索配置
- CREATE TEXT SEARCH DICTIONARY -- 定义一个新的文本搜索字典
- CREATE TEXT SEARCH PARSER -- 定义一个新的文本搜索解析器
- CREATE TEXT SEARCH TEMPLATE -- 定义一种新的文本搜索模板
- CREATE TRANSFORM -- 定义一个新的转换
- CREATE TRIGGER -- 定义一个新触发器
- CREATE TYPE -- 定义一种新的数据类型
- CREATE USER -- 定义一个新的数据库角色
- CREATE USER MAPPING -- 定义一个用户到一个外部服务器的新映射
- CREATE VIEW -- 定义一个新视图
- DEALLOCATE -- 释放一个预备语句
- DECLARE -- 定义一个游标
- DELETE -- 删除一个表的行
- DISCARD -- 抛弃会话状态
- DO -- 执行一个匿名代码块
- DROP ACCESS METHOD -- 移除一种访问方法
- DROP AGGREGATE -- 移除一个聚集函数
- DROP CAST -- 移除一个转换
- DROP COLLATION -- 移除一个排序规则
- DROP CONVERSION -- 移除一个转换
- DROP DATABASE -- 移除一个数据库
- DROP DOMAIN -- 移除一个域
- DROP EVENT TRIGGER -- 移除一个事件触发器
- DROP EXTENSION -- 移除一个扩展
- DROP FOREIGN DATA WRAPPER -- 移除一个外部数据包装器
- DROP FOREIGN TABLE -- 移除一个外部表
- DROP FUNCTION -- 移除一个函数
- DROP GROUP -- 移除一个数据库角色
- DROP INDEX -- 移除一个索引
- DROP LANGUAGE -- 移除一个过程语言
- DROP MATERIALIZED VIEW -- 移除一个物化视图
- DROP OPERATOR -- 移除一个操作符
- DROP OPERATOR CLASS -- 移除一个操作符类
- DROP OPERATOR FAMILY -- 移除一个操作符族
- DROP OWNED -- 移除一个数据库角色拥有的数据库对象
- DROP POLICY -- 从一个表移除一条行级安全性策略
- DROP PROCEDURE -- 删除一个存储过程
- DROP ROLE -- 移除一个数据库角色
- DROP RULE -- 移除一个重写规则
- DROP SCHEMA -- 移除一个模式
- DROP SEQUENCE -- 移除一个序列
- DROP SERVER -- 移除一个外部服务器描述符
- DROP TABLE -- 移除一个表
- DROP TABLESPACE -- 移除一个表空间
- DROP TEXT SEARCH CONFIGURATION -- 移除一个文本搜索配置
- DROP TEXT SEARCH DICTIONARY -- 移除一个文本搜索字典
- DROP TEXT SEARCH PARSER -- 移除一个文本搜索解析器
- DROP TEXT SEARCH TEMPLATE -- 移除一个文本搜索模板
- DROP TRANSFORM -- 移除转换
- DROP TRIGGER -- 移除一个触发器
- DROP TYPE -- 移除一个数据类型
- DROP USER -- 移除一个数据库角色
- DROP USER MAPPING -- 移除一个用于外部服务器的用户映射
- DROP VIEW -- 移除一个视图
- END -- 提交当前事务
- EXECUTE -- 执行一个预备语句
- EXPLAIN -- 显示一个语句的执行计划
- FETCH -- 使用游标从查询中检索行
- GRANT -- 定义访问特权
- IMPORT FOREIGN SCHEMA -- 从一个外部服务器导入表定义
- INSERT -- 在一个表中创建新行
- LISTEN -- 监听一个通知
- LOAD -- 载入一个共享库文件
- LOCK -- 锁定一个表
- MOVE -- 定位一个游标
- NOTIFY -- 生成一个通知
- PREPARE -- 为执行准备一个语句
- PREPARE TRANSACTION -- 为两阶段提交准备当前事务
- REASSIGN OWNED -- 更改一个数据库角色拥有的数据库对象的拥有关系
- REFRESH MATERIALIZED VIEW -- 替换一个物化视图的内容
- REINDEX -- 重建索引
- RELEASE SAVEPOINT -- 销毁一个之前定义的保存点
- RESET -- 把一个运行时参数的值恢复到默认值
- REVOKE -- 移除访问特权
- ROLLBACK -- 中止当前事务
- ROLLBACK PREPARED -- 取消一个之前为两阶段提交准备好的事务
- ROLLBACK TO SAVEPOINT -- 回滚到一个保存点
- SAVEPOINT -- 在当前事务中定义一个新的保存点
- SECURITY LABEL -- 定义或更改应用到一个对象的安全标签
- SELECT -- 从一个表或视图检索行
- SELECT INTO -- 从一个查询的结果定义一个新表
- SET -- 更改一个运行时参数
- SET CONSTRAINTS -- 为当前事务设置约束检查时机
- SET ROLE -- 设置当前会话的当前用户标识符
- SET SESSION AUTHORIZATION -- 设置当前会话的会话用户标识符和当前用户标识符
- SET TRANSACTION -- 设置当前事务的特性
- SHOW -- 显示一个运行时参数的值
- START TRANSACTION -- 开始一个事务块
- TRUNCATE -- 清空一个表或者一组表
- UNLISTEN -- 停止监听一个通知
- UPDATE -- 更新一个表的行
- VACUUM -- 垃圾收集并根据需要分析一个数据库
- VALUES -- 计算一个行集合
ABORT
名称
ABORT -- 中止当前事务
大纲
ABORT [ WORK | TRANSACTION ]复制
描述
ABORT回滚当前事务并且导致由该事务所作的所有更新被丢弃。这个命令的行为与标准SQL命令ROLLBACK的行为一样,并且只是为了历史原因存在。
参数
- WORK
TRANSACTION 可选关键词。它们没有效果。
注解
使用COMMIT成功地终止一个事务。
在一个事务块之外发出ABORT会发出一个警告消息并且不会产生效果。