GBASE 8C——SQL参考6 sql语法(15)

  1. START TRANSACTION

功能描述

启动事务。

语法格式

START TRANSACTION [ transaction_mode [, ...] ]

其中 transaction_mode 是下列之一:

    ISOLATION LEVEL { SERIALIZABLE | REPEATABLE READ | READ COMMITTED | READ UNCOMMITTED }

    READ WRITE | READ ONLY

    [ NOT ] DEFERRABLE

参数说明

参考 SET TRANSATION

注意事项

如果指定了隔离级别、读写模式 或者可延迟模式,新的事务将会具有这些特性,就像执行了 SET TRANSACTION一样。

范例

START TRANSACTION ISOLATION LEVEL READ COMMITTED READ WRITE;

START TRANSACTION

相关语法

BEGINCOMMITROLLBACKSAVEPOINTSET TRANSACTION

  1. TRUNCATE

功能描述

清理表数据,可以快速地从表中删除所有行。

语法格式

TRUNCATE [ TABLE ] [ ONLY ] name [ * ] [, ... ]

    [ RESTART IDENTITY | CONTINUE IDENTITY ] [ CASCADE | RESTRICT ]

参数说明

  1. ONLY:如果声明ONLY,只有指定的表会被清空。如果没有声明ONLY,这个表以及其所有子表(若有)会被清空;
  2. name:目标表的名字,可以被模式修饰;
  3. RESTART IDENTITY:自动重新开始被截断表的列所拥有的序列;
  4. CONTINUE IDENTITY:不改变序列的值,这是缺省值;
  5. CASCADE:级联清空所有在该表上有外键引用的表,或者由于CASCADE而;被添加到组中的表
  6. RESTRICT:如果其他表在该表上有外键引用则拒绝清空,这是缺省值;

注意事项

TRUNCATE TABLE比DELETE速度快且使用系统和事务日志资源少:

  1. DELETE语句每次删除一行,并在事务日志中为所删除每行记录一项。
  2. TRUNCATE TABLE通过释放存储表数据所用数据页来删除数据,并且只在事务日志中记录页的释放。

TRUNCATE,DELETE,DROP三者的差异如下:

  1. TRUNCATE TABLE:删除内容,释放空间,但不删除定义。
  2. DELETE TABLE:删除内容,不删除定义,不释放空间。
  3. DROP TABLE:删除内容和定义,释放空间。

范例

TRUNCATE TABLE g_customer;

TRUNCATE TABLE

相关语法

DELETE

  1. UNLISTEN

功能描述

停止监听一个通知。

语法格式

UNLISTEN { channel | * }

参数说明

  1. channel:一个通知频道的名称,可以是任意标识符;
  2. *:所有用于该会话的监听都会被注册。

注意事项

可以UNLISTEN没有监听的通知,且不会告警。

每个会话末尾都会自动执行UNLISTEN *。

范例

LISTEN virtual;

LISTEN

NOTIFY virtual;

NOTIFY

Asynchronous notification "virtual" received from server process with PID 3304.

UNLISTEN virtual;

UNLISTEN

NOTIFY virtual;

NOTIFY

语法兼容

SQL 标准中没有UNLISTEN命令。

相关语法

LISTENNOTIFY

  1. UNPAUSE CLUSTER

功能描述

取消暂停数据库集群。

语法格式

UNPAUSE CLUSTER

注意事项

如果之前通过命令PAUSE CLUSTER暂停了集群,则可以通过UNPAUSE CLUSTER恢复操作。

范例

UNPAUSE CLUSTER;

UNPAUSE CLUSTER

语法兼容

在SQL标准中没有UNPAUSE CLUSTER语句。

  1. UPDATE

功能描述

更新表中的数据。

语法格式

[ WITH [ RECURSIVE ] with_query [, ...] ]

UPDATE [ ONLY ] table_name [ * ] [ [ AS ] alias ]

    SET { column_name = { expression | DEFAULT } |

          ( column_name [, ...] ) = [ ROW ] ( { expression | DEFAULT } [, ...] ) |

          ( column_name [, ...] ) = ( sub-SELECT )

        } [, ...]

    [ FROM from_list ]

    [ WHERE condition | WHERE CURRENT OF cursor_name ]

    [ RETURNING * | output_expression [ [ AS ] output_name ] [, ...] ]

参数说明

  1. with_query:WITH子句允许指定一个或者更多个在UPDATE中可用其名称引用的子查询;
  2. table_name:要更新的表名,可以被模式修饰;如果在表名前指定了ONLY只会更新所提及表中的匹配行,如果没有指定ONLY任何从所提及表继承得到的表中的匹配行也会 被更新,在表名之后指定*可以显式地指示要把后代表也包括在内;
  3. alias:目标表的别名;
  4. column_name:要修改的字段名;
  5. expression:赋给字段的值或表达式;
  6. DEFAULT:用对应字段的缺省值填充该字段;
  7. sub-SELECT:SELECT子查询,是使用同一数据库里其他表的信息来更新一个表可以使用子查询的方法;
  8. from_list:一个表的表达式列表,允许在WHERE条件里使用其他表的字段,与在一个SELECT语句的FROM子句里声明表列表类似;
  9. condition:一个返回boolean类型结果的表达式,只有这个表达式返回true的行才会被更新;
  10. cursor_name:GBase 8c暂不支持。要在WHERE CURRENT OF条件中使用的游标名,将被更新的是从这个游标中最近取出的行,该游标必须是一个在UPDATE目标表上的非分组查询;
  11. output_expression:在所有需要更新的行都被更新之后,UPDATE命令用于计算返回值的表达式;
  12. output_name:字段的返回名称。

注意事项

要修改表,用户必须对该表有UPDATE权限。

对expression或condition条件里涉及到的任何表要有SELECT权限。

范例

UPDATE customer SET birthday = '20200628' WHERE id = 8;

UPDATE 1

语法兼容

这个命令符合SQL标准。

  1. VACUUM

功能描述

VACUUM回收表或B-Tree索引中已经删除的行所占据的存储空间。

语法格式

VACUUM [ ( { FULL | FREEZE | VERBOSE | ANALYZE | DISABLE_PAGE_SKIPPING } [, ...] ) ] [ table_name [ (column_name [, ...] ) ] ]

VACUUM [ FULL ] [ FREEZE ] [ VERBOSE ] [ table_name ]

VACUUM [ FULL ] [ FREEZE ] [ VERBOSE ] ANALYZE [ table_name [ (column_name [, ...] ) ] ]

参数说明

  1. FULL:选择“FULL”清理,这样可以恢复更多的空间,但是需要耗时更多,并且在表上施加了排他锁。
  2. FREEZE:指定FREEZE相当于执行VACUUM时将vacuum_freeze_min_age参数设为0;
  3. VERBOSE:为每个表打印一份详细的清理工作报告;
  4. ANALYZE:更新用于优化器的统计信息,以决定执行查询的最有效方法;
  5. DISABLE_PAGE_SKIPPING:通常,VACUUM将基于可见性映射跳过页面。已知所有元组都被冻结的页面总是会被跳过,而那些所有元组对所有事务都可见的页面则可能会被跳过(除非执行的是激进的清理)。此外,除非在执行激进的清理时,一些页面也可能会被跳过,这样可避免等待其他页面完成对其使用。这个选项禁用所有的跳过页面的行为,其意图是只在可见性映射内容值得怀疑时使用,这种情况只有在硬件或者软件问题导致数据库损坏时才会发生;
  6. table_name:要清理的表的名称,可以被模式修饰,缺省情况下为当前数据库中的所有表和物化视图;
  7. column_name:要分析的具体的字段名称,缺省情况下是表中的所有列。

注意事项

在通常的数据库操作里,那些已经DELETE的行并没有从它们所属的表中物理删除;在完成VACUUM之前它们仍然存在。因此有必要周期地运行VACUUM,特别是在经常更新的表上。

要对一个表进行VACUUM操作,通常用户必须是表的所有者或系统管理员。数据库的所有者允许对数据库中除了共享目录以外的所有表进行VACUUM操作(该限制意味着只有系统管理员才能真正对一个数据库进行VACUUM操作)。VACUUM命令会跳过那些用户没有权限的表进行垃圾回收操作。

VACUUM不能在事务块内执行。

建议生产数据库经常清理(至少每晚一次),以保证不断地删除失效的行。尤其是在增删了大量记录之后,对受影响的表执行VACUUM ANALYZE命令是一个很好的习惯。这样将更新系统目录为最近的更改,并且允许查询优化器在规划用户查询时有更好的选择。

不建议日常使用FULL选项,但是可以在特殊情况下使用。例如在用户删除了一个表的大部分行之后,希望从物理上缩小该表以减少磁盘空间占用。VACUUMFULL通常要比单纯的VACUUM收缩更多的表尺寸。

VACUUM会导致I/O流量的大幅增加,这可能会影响其他活动会话的性能。因此,有时候会建议使用基于开销的VACUUM延迟特性。

范例

CREATE UNIQUE INDEX customer_index ON customer(id);

CREATE INDEX

VACUUM (VERBOSE, ANALYZE) customer;

INFO:  analyzing "public.customer"

VACUUM

语法兼容

在SQL标准中没有VACUUM语句。

  1. VALUES

功能描述

根据给定的值表达式计算一个或一组行的值。通常用于在一个较大的命令内生成一个“常数表”。

语法格式

VALUES ( expression [, ...] ) [, ...]

    [ ORDER BY sort_expression [ ASC | DESC | USING operator ] [, ...] ]

    [ LIMIT { count | ALL } ]

    [ OFFSET start [ ROW | ROWS ] ]

    [ FETCH { FIRST | NEXT } [ count ] { ROW | ROWS } ONLY ]

参数说明

  1. expression:用于计算或插入结果表指定地点的常量或者表达式,在一个出现在INSERT顶层的VALUES列表中,expression可以被DEFAULT替换以表示插入目的字段的缺省值。除此以外,当VALUES出现在其他场合的时候是不能使用DEFAULT的;
  2. sort_expression:一个表示如何排序结果行的表达式或者整数常量;
  3. operator:一个排序操作符;
  4. count:返回的最大行数;
  5. start:声明开始返回行之前忽略的行数。

注意事项

应当避免使用VALUES返回数量非常大的结果行,否则可能会遭遇内存耗尽或者性能低下。出现在INSERT中的VALUES是一个特殊情况,因为目标字段类型可以从INSERT的目标表获知,并不需要通过扫描VALUES列表来推测,所以在此情况下可以处理非常大的结果行。

如果指定了多行,那么每一行都必须拥有相同的元素个数。

范例

详见INSERT

语法兼容

VALUES符合 SQL 标准。

相关语法

INSERTSELECT

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值