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语句。