技术开发 频道

RadonDB用户使用手册——所支持的SQL集

  【IT168 技术】背景

  在 SQL 语法上, RadonDB 与 MySQL 完全兼容。

  在满足大部分需求场景下, RadonDB 的 SQL 实现只是 MySQL 一个子集,从而更好的使用和规范。

  DDL

  1. DATABASE

  RadonDB 对 Database 的操作只支持创建和删除。

  1.1. 创建 DB

  语法:

  CREATE DATABASE [IF NOT EXISTS] db_name

  说明:

  · RadonDB 会把此语句直接发到所有后端执行并返回。

  · 跨分区非原子操作。

  示例:

  mysql> CREATE DATABASE sbtest1;

  Query OK, 4 rows affected (0.01 sec)

  1.2. 删除 DB

  语法:

  DROP DATABASE [IF EXISTS] db_name

  说明:

  · RadonDB 会把此语句直接发到所有后端并返回。

  · 跨分区非原子操作。

  示例:

  mysql> DROP DATABASE sbtest1;

  Query OK, 0 rows affected (0.02 sec)

  2. TABLE

  2.1. 创建表

  语法:

  CREATE TABLE [IF NOT EXISTS] table_name

  (create_definition,...)

  [ENGINE={InnoDB|TokuDB}]

  [DEFAULT CHARSET=(charset)]

  PARTITION BY HASH(shard-key)

  说明:

  · 创建分区信息并在各个分区生成分区表。

  · 分区表语法必须包含 PARTITION BY HASH (分区键)。

  · 分区键仅支持指定一个列, 该列数据类型没有限制 (BINARY/NULL 类型除外)。

  · 分区方式为 HASH, 根据分区键 HASH 值均匀分散在各个分区。

  · table_options 只支持 ENGINE 和 CHARSET,其他自动被忽略。

  · 分区表默认引擎为 InnoDB。

  · 表字符集默认为 utf8。

  · 不支持非分区键的 PRIMARY/UNIQUE 约束,直接返回错误。

  · 跨分区非原子操作。

  示例:

  mysql> CREATE TABLE t1(id int, age int) PARTITION BY HASH(id);

  Query OK, 0 rows affected (0.09 sec)

  2.2. 删除表

  语法:

  DROP TABLE [IF EXISTS] table_name

  说明:

  · 删除分区信息及后端分区表。

  · 跨分区非原子操作。

  示例:

  mysql> DROP TABLE t1;

  Query OK, 0 rows affected (0.05 sec)

  2.3. 更改表引擎

  ALTER TABLE... ENGINE...用来做表引擎更换。

  语法:

  ALTER TABLE ... ENGINE={InnoDB|TokuDB...}

  说明:

  · RadonDB 根据路由信息,发到相应的后端执行引擎更改。

  · 跨分区非原子操作。

  示例:

RadonDB用户使用手册——所支持的SQL集

  2.4. 更改表字符集

  RadonDB 的表字符集默认为 utf8,下例语法用来修改表字符集。

  语法:

  ALTER TABLE table_name CONVERT TO CHARACTER SET {charset}

  说明:

  · RadonDB 根据路由信息,发到相应的后端执行表字符集修改。

  · 跨分区非原子操作。

  示例:

RadonDB用户使用手册——所支持的SQL集

  2.5. 清空表

  语法:

  TRUNCATE TABLE table_name

  说明:

  · 跨分区非原子操作。

  示例:

RadonDB用户使用手册——所支持的SQL集

  3. 列操作

  3.1. 添加新列

  语法:

  ALTER TABLE table_name ADD COLUMN (col_name column_definition,...)

  说明:

  · 为表增加新列。

  · 跨分区非原子操作。

  示例:

  mysql> CREATE TABLE t1(a int primary key) PARTITION BY HASHa);

  Query OK, 0 rows affected (0.16 sec)

  mysql> ALTER TABLE t1 ADD COLUMN (b int, c varchar(100));

  Query OK, 0 rows affected (0.10 sec)

  mysql> SHOW CREATE TABLE t1\G;

  *************************** 1. row ***************************

  Table: t1

  Create Table: CREATE TABLE `t1` (

  `a` int(11) NOT NULL,

  `b` int(11) DEFAULT NULL,

  `c` varchar(100) DEFAULT NULL,

  PRIMARY KEY (`a`)

  ) ENGINE=InnoDB DEFAULT CHARSET=latin1

  1 row in set (0.00 sec)

  3.2. 删除列

  语法:

  ALTER TABLE table_name DROP COLUMN col_name

  说明:

  · 删除表的列。

  · 无法删除分区键所在的列。

  · 跨分区非原子操作。

  示例:

RadonDB用户使用手册——所支持的SQL集

  3.3. 修改列

  语法:

  ALTER TABLE table_name MODIFY COLUMN col_name column_definition

  说明:

  · 修改表的列定义。

  · 无法修改分区键所在的列。

  · 跨分区非原子操作。

  示例:

RadonDB用户使用手册——所支持的SQL集

  4. INDEX

  为了简化索引操作, RadonDB 只支持 CREATE/DROP INDEX 语法。

  4.1. 添加索引

  语法:

  CREATE INDEX index_name ON table_name (index_col_name,...)

  说明:

  · RadonDB 根据路由信息,发到相应的后端执行索引添加。

  · 跨分区非原子操作。

  示例:

  mysql> CREATE INDEX idx_id_age ON t1(id, age);

  Query OK, 0 rows affected (0.17 sec)

  4.2. 删除索引

  语法:

  DROP INDEX index_name ON table_name

  说明:

  · RadonDB 根据路由信息,发到相应的后端执行索引删除。

  · 跨分区非原子操作。

  示例:

  mysql> DROP INDEX idx_id_age ON t1;

  Query OK, 0 rows affected (0.09 sec)

  DML

  1. SELECT 语句

  语法:

  SELECT

RadonDB用户使用手册——所支持的SQL集

  说明:

  · 支持跨分区的 count, sum, avg, max, min 等聚合函数, avg 字段必须在 select_expr 中, 聚合函数只对数值型有效。

  · 支持跨分区的 order by, group by, limit 等操作, 字段必须在 select_expr 中。

  · 支持 join 等复杂查询,自动路由到计算节点 (AP-Node) 执行并返回。

  示例:

RadonDB用户使用手册——所支持的SQL集

  2. INSERT 语句

  语法:

  INSERT INTO tbl_name

  (col_name,...)

  {VALUES | VALUE}

  说明:

  · 支持分布式事务,保证跨分区写入原子性。

  · 支持 insert 多个值,这些值可以在不同分区。

  · 必须指定写入列。

  · 不支持子句。

  示例:

  mysql> INSERT INTO t1(id, age) VALUES(1, 24), (2, 28), (3, 29);

  Query OK, 3 rows affected (0.01 sec)

  3. DELETE 语句

  语法:

  DELETE FROM tbl_name

  [WHERE where_condition]

  说明:

  · 支持分布式事务,保证跨分区删除原子性。

  · 不支持无 WHERE 条件删除。

  · 不支持子句。

  示例:

  mysql> DELETE FROM t1 WHERE id=1;

  Query OK, 2 rows affected (0.01 sec)

  4. UPDATE 语句

  语法:

  UPDATE table_reference

  SET col_name1={expr1|DEFAULT} [, col_name2={expr2|DEFAULT}] ...

  [WHERE where_condition]

  说明:

  · 支持分布式事务,保证跨分区更新原子性。

  · 不支持无 WHERE 条件更新。

  · 不支持更新分区键。

  · 不支持子句。

  示例:

  mysql> UPDATE t1 set age=age+1 WHERE id=1;

  Query OK, 1 row affected (0.00 sec)

  5. REPLACE 语句

  语法:

  REPLACE INTO tbl_name

  [(col_name,...)]

  {VALUES | VALUE} ({expr | DEFAULT},...),(...),...

  说明:

  · 支持分布式事务,保证跨分区写入原子性。

  · 支持 replace 多个值,这些值可以在不同分区。

  · 必须指定写入列。

  示例:

  mysql> REPLACE INTO t1 (id, age) VALUES(3,34),(5, 55);

  Query OK, 2 rows affected (0.01 sec)

  SHOW

  1. SHOW ENGINES

  语法:

  SHOW ENGINES

  说明:

  · 后端分区 MySQL 支持的引擎列表。

  示例:

RadonDB用户使用手册——所支持的SQL集

  2. SHOW DATABASES

  语法:

  SHOW DATABASES

  说明:

  · 包含系统 DB,比如 mysql, information_schema

  示例:

RadonDB用户使用手册——所支持的SQL集

  3. SHOW TABLES

  语法:

  SHOW TABLES

  [FROM db_name]

  说明:

  · 如果未指定 db_name, 则返回当前 DB 下的表。

  示例:

RadonDB用户使用手册——所支持的SQL集

  4. SHOW CREATE TABLE

  语法:

  SHOW CREATE TABLE table_name

  说明:

  · N/A

  示例:

RadonDB用户使用手册——所支持的SQL集

  5. SHOW PROCESSLIST

  语法:

  SHOW PROCESSLIST

  说明:

  · 显示的为 client 到 RadonDB 的连接情况,并非后端分区 MySQL。

  示例:

RadonDB用户使用手册——所支持的SQL集

  6. SHOW VARIABLES

  语法:

  SHOW VARIABLES

  [LIKE 'pattern' | WHERE expr]

  说明:

  · 为了兼容 JDBC/mydumper 。

  · SHOW VARIABLES 命令会发往后端分区 MySQL (随机分区)获取并返回。

  USE

  1. USE DATABASE

  语法:

  USE db_name

  说明:

  · 切换当前 session 的 database

  示例:

  mysql> use test;

  Database changed

  KILL

  1. KILL processlist_id

  语法:

  KILL processlist_id

  说明:

  · kill 某个链接(包含终止链接正在执行的语句)。

  示例:

RadonDB用户使用手册——所支持的SQL集

  SET

  说明:

  · 为了兼容 JDBC/mydumper 。

  · SET 是一个空操作,所有操作并不会生效,请勿直接使用。

0
相关文章