文档

SQL语法

更新时间:
一键部署

1、ALTER TABLE

1.1 语法

ALTER TABLE { ONLY table_ident | table_ident }
  { SET ( parameter = value [ , ... ] )
    | RESET ( parameter [ , ... ] )
    | ADD [ COLUMN ] column_name data_type [ column_constraint [ ... ] ]
    | RENAME TO table_ident
  }

1.2 说明

Alter table用于修改已有表的定义。

1.3 参数

SET/RESET

用于改变表的参数,RESET会复位表的参数为默认值。支持的参数列表,参看:这里

ADD COLUMN

用于给表添加列。

ALTER TABLE test ADD col2 bigint;

RENAME TO

用于修改表名,操作执行过程中,shard可能暂时不可用。

ALTER TABLE test RENAME TO newname

2、ALTER USER

2.1 语法

ALTER USER username
  SET ( user_parameter = value [, ...] )

2.2 说明

ALTER USER用于修改已有用户。只有已存在的高权限账号或用户自身才具有修改权限。

2.3 参数

username

数据库已有的用户名

SET

用于修改用户相关参数,比如password以明文方式修改用户密码

ALTER USER rds SET (password='123456')

3、CREATE TABLE

3.1 语法

CREATE TABLE [ IF NOT EXISTS ] table_ident ( [
    {
        base_column_definition
      | column_constraint
    }
    [, ... ] ]
)
[ CLUSTERED [ BY (routing_column) ] INTO num_shards SHARDS ]

其中,column_constraint指

{ PRIMARY KEY |
  NOT NULL |
  INDEX { OFF | USING { PLAIN }
}

3.2 说明:

CREATE TABLE用于创建空表。约束包括列约束和表的约束,列constraint是列定义的一部分;表的constraint不局限在固定的列,可以是多列。

3.3 参数:

IF NOT EXISTS

可选项,当表存在时,不做任何事情。

CLUSTERED

可选项,clustered指定了表分布方式。num_shards:指定表分为多少个shard,如果不指定,默认按照公式 num_shards = max(4, num_data_nodes * 2)创建shard。routing_column: 指定按照那一列进行shard。如果不指定,有primary key的话,按照primary key进行shard。否则,默认会按照文档ID均匀分区。

CREATE TABLE IF NOT EXISTS test (
   "label" TEXT,
   "adcode" TEXT,
   "trl_reason_no" BIGINT
)
CLUSTERED INTO 10 SHARDS

4、CREATE USER

4.1 语法

CREATE USER username
[ WITH ( user_parameter = value [, ...]) ]

4.2 说明

为数据库集群创建用户,创建过程允许指定密码。

4.3 参数

username

指定唯一的用户名

WITH

user_parameter支持的user参数;password以明文方式定义用户密码

CREATE USER rds WITH(password='123456');

5、DELETE

5.1 语法

DELETE FROM table_ident [ [AS] table_alias ] [ WHERE condition ]

5.2 说明

删除满足where条件的记录

5.3 参数

table_ident

要删除记录的表名

table_alias

表的别名

condition

可以是表达式,用于指定满足哪些条件的记录被删掉

DELETE FROM test where col='201709';

6、DROP TABLE

6.1 语法

DROP TABLE [IF EXISTS] table_ident

6.2 说明

DROP TABLE 用于从集群中删除一张表,使用IF EXISTS当表不存在时,也不会报错

6.3 参数

table_ident需要被删除的表的名字

7、DROP USER

7.1 语法

DROP USER [ IF EXISTS ] username;

7.2 说明

DROP USER用于删除已存在的数据库用户

7.3 参数

  • IF EXISTS:用户不存在时,不会报错

  • username:数据库用户名

    8、INSERT

    8.1 语法

    INSERT INTO table_ident
    [ ( column_ident [, ...] ) ]
    { VALUES ( expression [, ...] ) [, ...] | ( query ) | query }
    [ ON CONFLICT (column_ident [, ...]) DO UPDATE SET { column_ident = expression [, ...] } |
      ON CONFLICT [ ( column_ident [, ...] ) ] DO NOTHING ]

    8.2 说明

    用于往表中插入数据。

  • ON CONFLICT DO UPDATE SET:用于当遇到冲突时,继续插入数据,例如,当col1是主键并且1存在时,更新col2为42

    INSERT INTO t (col1, col2) VALUES (1, 41)
    ON CONFLICT (col1) DO UPDATE SET col2 = excluded.col2 + 1
  • ON CONFLICT DO NOTHING:用于当遇到冲突时,不插入数据,例如:当col1是主键并且1存在,不做插入。

    INSERT INTO t (col1, col2) VALUES (1, 42)
    ON CONFLICT DO NOTHING

    8.3 参数

  • table_ident:已存在的表名

  • column_ident:表中的列名

  • expression:表达式或值,会赋值给对应的列

  • query:可以是select子句,指定要插入的数据

9、SELECT

9.1 语法

SELECT [ ALL | DISTINCT ] * | expression [ [ AS ] output_name ] [, ...]
  [ OVER ( window_definition ) [, ...] ]
  [ FROM relation ]
  [ WHERE condition ]
  [ GROUP BY expression [, ...] [HAVING condition] ]
  [ UNION ALL query_specification ]
  [ WINDOW window_name AS ( window_definition ) [, ...] ]
  [ ORDER BY expression [ ASC | DESC ] [ NULLS { FIRST | LAST } ] [, ...] ]
  [ LIMIT num_results ]
  [ OFFSET start ]

9.2 说明

与postgres语法兼容,用于从表中查询获取数据。

9.3 参数

OVER

定义window窗口,例如:

 SELECT col1, ROW_NUMBER() OVER(ORDER BY col1) FROM unnest(['x','y','z']);

FROM

FROM relation 用于指定SELECT的源。

relation可以是如下对象:表名、表别名、视图,join语句、子查询等。

其中join关系:

relation { , | join_type JOIN } relation [ ON join_condition ]

join_type包括:LEFT [OUTER], RIGHT [OUTER], FULL [OUTER], CROSS or INNER

WHERE

指定满足的条件GROUP BY分组,GROUP BY expression [, …],expression是聚合函数

UNION ALL

组合两个SELECT查询的结果。

ORDER BY

对结果进行排序,可以升序、降序等方式ORDER BY expression [ ASC | DESC ] [ NULLS { FIRST | LAST } ] [, …]

LIMIT

指定限制返回的数据条数LIMIT num_results

OFFSET

指定偏移,从start初开始OFFSET start

SELECT 查询示例:

SELECT dn.start_id, dn.end_id
  , COUNT(concat(dn.start_id, dn.end_id)) AS count
FROM t1 dn
  INNER JOIN t2 td ON td.vhc_id = dn.vhc_id
GROUP BY dn.start_id, dn.end_id

10、SHOW SCHEMAS

10.1 语法

SHOW SCHEMAS [LIKE 'pattern' | WHERE expression]

10.2 说明

用于获取集群上schema列表

10.3 参数

LIKE

用于模式匹配

WHERE

指定满足条件的返回

11、SHOW TABLES

11.1 语法

SHOW TABLES [{FROM | IN} table_schema] [LIKE 'pattern' | WHERE expression]

11.2 说明

SHOW TABLES用于从集群中获取表名列表。table_schema指定从哪个schema中获取。

11.3 参数

LIKE

用于模式匹配

WHERE

指定满足条件的返回

12、SHOW CREATE TABLE

12.1 语法

SHOW CREATE TABLE table_ident

12.2 说明

SHOW CREATE TABLE 用于dump已创建的表的schema信息。

12.3 参数

  • table_ident:表名

13、UPDATE

13.1 语法

UPDATE table_ident [ [AS] table_alias ] SET
    { column_ident = expression } [, ...]
  [ WHERE condition ]

13.2 说明

UPDATE用于更新满足指定条件的表的数据。SET用于设置列更新的值。

13.3 参数

  • table_ident:表名或表的标识符

  • table_alias:表别名

  • column_ident:表中的列名

  • expression:表达式或值,赋值给对应的列

  • condition:指定的满足条件的row

14、GRANT

14.1 语法

GRANT { { DQL | DML | DDL | AL [,...] } | ALL [ PRIVILEGES ] }
[ON {SCHEMA | TABLE} identifier [, ...]]
TO user_name [, ...];

14.2 说明

GRANT用于赋予指定用户对应的权限。权限包括四类:DQL 、 DML 、 DDL 、 AL。权限说明:

DQL:

  • SELECT

  • SHOW

    DML

  • INSERT

  • UPDATE

  • DELETE

    DDL:

  • CREATE TABLE

  • DROP TABLE

  • ALTER TABLE

    AL:

  • CREATE USER

  • DROP USER

14.3 参数

  • identifier:如果指定表名,需要设置全名(即包括schema和表名称),否则只在当前schema查找表名。

  • user_name:用户名

15、REVOKE

15.1 语法

REVOKE { { DQL | DML | DDL | AL [,...] } | ALL [ PRIVILEGES ] }
[ON {SCHEMA | TABLE} identifier [, ...]]
FROM user_name [, ...];

15.2 说明

REVOKE用于移除某个用户的权限

15.3 参数

  • identifier:如果指定表名,需要设置全名(即包括schema和表名称),否则只在当前schema查找表名。

  • user_name:用户名

16、EXPLAIN

16.1 语法

EXPLAIN [ ANALYZE ] statement

16.2 说明

EXPLAIN用于显示statement语句的执行计划;EXPLAIN ANALYZE用于分析不同执行阶段的耗时情况。

16.3 参数

  • statement:执行的SQL语句。

  • 本页导读 (1)
文档反馈