hhdb数据库介绍(9-15)

SQL语法支持

DML语句

在关系集群数据库中,DML语句的逻辑将变的更为复杂。计算节点将DML语句分为两大类:单库DML语句与跨库DML语句。

单库DML语句,指SQL语句只需在一个节点上运行,即可计算出正确结果。假设分片表customer分片字段为provinceid,则下列语句为单库SELECT,因为该条语句只会在provinceid=1所路由的那个节点上运行:

SELECT * FROM customer WHERE provinceid=1;

跨库DML语句,指SQL语句需要多个数据节点的数据,经过计算节点的二次处理,才能整合计算出最终的结果。假设分片表customer分片字段为provinceid,则下面的SELECT语句为跨库语句,因为 id>10的数据可能分布在多个节点,为了整合并排序得出最终结果,需要获取多个节点的数据:

SELECT * FROM customer WHERE id>10 ORDER BY id;

显然,单库的SQL语句要比跨库的SQL语句性能高。在使用计算节点的时候,尽量使用单库的DML语句。

上面的例子,描述的仅仅是简单单表的SELECT单库与跨库查询。那么在JOIN中,需要多个数据节点的数据时,称之为跨库JOIN;只需要单个数据节点的数据时,称之为单库JOIN。

对于子查询语句,需要查询多个数据节点的数据时,称之为跨库子查询;只需要单个数据节点的数据时,称之为单库子查询。

计算节点对单库JOIN的查询支持功能,与单库SELECT语句支持功能一样。

DELETE语句

存储节点5.6.2开始,DELETE语句支持删除指定分区(partition)中的数据。如有表名称t与分区名称p0,下面语句将删除分区p0所有的数据:

DELETE FROM t PARTITION(p0);

单库的DELETE语句

存储节点语句类型 子句类型 功能 支持状态 说明
DELETE PARTITION 支持
ORDER BY 支持
LIMIT 支持
WHERE dnid 支持 在where条件中指定分片节点
函数 支持
多表DELETE 支持
view 限制支持 支持了仅查询字段的单表视图的delete操作

跨库的DELETE语句

存储节点语句类型 子句类型 功能 支持状态 说明
DELETE PARTITION 支持
ORDER BY DESC ASC 支持
LIMIT 支持
ORDER BY ... LIMIT ... 支持 父子表不支持
ORDER BY字段值大小写敏感 支持
WHERE WHERE中的函数 支持
JOIN 支持 含临时表场景不支持

INSERT语句

单库INSERT语句

存储节点语句类型 子句类型 功能 支持状态 说明
INSERT INSERT ... SELECT ... 支持
IGNORE 支持
PARTITION 支持
ON DUPLICATE KEY UPDATE 支持
INSERT INTO table_name(columns... ) VALUES(values...) 支持
INSERT INTO ... VALUES() 支持
INSERT INTO ... SET 支持
分片表无拆分字段值 不支持
分片表拆分字段值为NULL 支持 需要在分片函数参数中配置NULL值参数
子表无关联字段值 不支持 子表数据的INSERT操作必须满足外键条件
子表关联字段值为NULL 不支持 子表数据的INSERT操作必须满足外键条件
INSERT BATCH 分片表 支持
全局表 支持
子表 条件限制 父表的关联字段不是分片字段时不支持。

INSERT IGNORE
在计算节点上,当出现主键/唯一键冲突时,将忽略数据与冲突信息。

mysql> create table test(id int not null primary key,provinceid int)engine=innodb;
Query OK, 0 rows affected (0.02 sec)
mysql> insert into test set id = 1,provinceid=2;
Query OK, 1 row affected (0.00 sec)
mysql> select * from test;
+----+------------+
| id | provinceid |
+----+------------+
| 1  | 2          |
+----+------------+
1 row in set (0.00 sec)
mysql> insert ignore into test set id = 1,provinceid=2; --主键id为1的记录已经存在,数据被忽略。
Query OK, 0 rows affected (0.00 sec)

对分片表INSERT IGORE语句的操作,若INSERT语句中,没有给出分片字段与分片字段值,计算节点将根据是否开启全局唯一约束判断是否忽略SQL语句。

例如 test 表为分片表,id 为分片字段

mysql> CREATE TABLE `test2` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(20) DEFAULT NULL,
  UNIQUE KEY `id` (`id`),
  UNIQUE KEY `name` (`name`)
) ENGINE=InnoDB;

mysql> insert ignore into test2(name) values ('e');
mysql> insert ignore into test2(name) values ('e');

当关闭表全局唯一约束时,插入第2条时,如果id 列1、2 值路由到同一个节点,则第2条SQL 会忽略,若不是同一节点,则第2条会插入成功。

当开启表全局唯一约束时,插入第2条时,如果id 列1、2 值路由到同一个节点,则第2条SQL 会忽略,若不是同一节点,则第2条SQL也会忽略。

INSERT 无分片字段
若INSERT 从句中没有指定分片字段的值时:

若分片字段有default 默认值,默认按照default值路由;

若分片字段没有default 默认值,会填充null , 若null值配置了路由规则即可插入;未配置路由规则则不允许插入(例如range match 这类需要单独配置null 分片规则;auto_crc32 这类,根据null自动路由)。

跨库INSERT语句

在关系集群数据库中,INSERT语句只有在INSERT... SELECT与INSERT BATCH两种情况下,才会产生跨库INSERT语句。

INSERT BATCH指的是单条INSERT语句,写入多行记录的方式:

INSERT INTO ... table_name VALUES(),VALUES(),VALUES();
存储节点语句类型 子句类型 功能 支持状态 说明
INSERT INSERT ... SELECT ... 支持
INSERT BATCH 子表 支持 父表的JOIN字段不是分片字段时不支持。
全局表 支持
分片表 支持

批量INSERT (INSERT BATCH)的情况特殊说明:

事务中的批量INSERT,部分成功部分失败,会自动回滚至上一个SAVEPOINT。

LOAD DATA语句

存储节点语句类型 子句类型 功能 支持状态 说明
LOAD DATA LOAD DATA ... INFILE ... INTO TABLE 支持 1. 要求执行语句的计算节点数据库用户拥有FILE权限
2. 当计算节点为集群模式时,无论在集群中哪台服务器上执行此语法,导入文件都必须上传至当前主计算节点服务器上的固定路径:/usr/local/hhdb/hhdb-server/HotDB-TEMP
LOW_PRIORITY 不支持
CONCURRENT 不支持
LOCAL 不支持
REPLACE 支持
IGNORE 支持
PARTITION 不支持
CHARACTER SET 不支持
{FIELDS | COLUMNS} [TERMINATED BY 'string'] [[OPTIONALLY] ENCLOSED BY 'char'] [ESCAPED BY 'char'] 支持
LINES STARTING BY 'string' 不支持
LINES TERMINATED BY 'string' 支持
导入指定字段 支持
SET 支持
IGNORE number 支持

REPLACE语句

单库REPLACE语句

存储节点语句类型 子句类型 功能 支持状态 说明
REPALCE REPLACE ... SELECT ... 单库简单单表查询 支持
单库JOIN 支持
单库子查询 支持
单库UNION/UNION ALL 支持
PARTITION 支持
ON DUPLICATE KEY UPDATE 支持
REPLACE INTO table_name(columns... ) VALUES(values...) 支持
REPALCE INTO ... VALUES() 支持
REPLACE INTO ... SET 支持
分片表无拆分字段值 不支持
分片表拆分字段值为NULL 支持 需要在分片函数参数中配置NULL值参数
子表无关联字段值 不支持 子表数据的INSERT操作必须满足外键条件
子表关联字段值为NULL 不支持 子表数据的INSERT操作必须满足外键条件
REPLACE BATCH 分片表 支持
全局表 支持

跨库REPLACE语句

在关系集群数据库中,REPLACE语句只有在REPLACE ... SELECT与REPLACE BATCH两种情况下,才会产生跨库REPLACE语句。

REPLACE BATCH指的是单条REPLACE语句,写入多行记录的方式:

REPLACE INTO ... table_name VALUES(),VALUES(),VALUES();
存储节点语句类型 子句类型 功能 支持状态 说明
REPLACE REPLACE ... SELECT ... 跨库简单单表查询 支持
跨库JOIN 不支持
跨库UNION 不支持
REPLACE BATCH 子表 支持 父表的JOIN字段不是分片字段时不支持。
全局表 支持
分片表 支持

SELECT语句

单库SELECT语句

存储节点语句类型 子句类型 功能 支持状态 说明
SELECT JOIN LEFT JOIN 支持
INNER JOIN 支持
RIGHT JOIN 支持
CROSS JOIN 支持
普通JOIN(无JOIN关键字的多表查询) 支持
PARTITION分区表 支持
单种表类型的混合JOIN 支持
多表类型的混合JOIN 支持
子查询 JOIN 支持
IFNULL/NULLIF 支持
UNION/UNION ALL 支持
IS NULL/IS NOT NULL 支持
PARTITION分区表 支持
Select from where表达式 支持
Select select表达式 支持
SELECT FROM SELECT表达式 支持
UNION/UNION ALL 简单单表查询 支持
JOIN 支持
子查询 支持 同子查询的支持语法相同
Having聚合函数 支持
PARTITION分区表 支持
DISTINCTROW 支持
DISTINCT 支持
STRAIGHT_JOIN 支持
SQL_NO_CACHE 支持
PARTITION 支持
WHERE dnid 支持 1. SET show_dnid=1之后,不支持WHERE 条件带dnid
2. dnid与其他条件用or关联,仅取dnid条
3. 不支持SELECT子句中跟dnid表达式,例如:SELECT dnid=4 FROM dml_a_jwy
函数 支持 请参考函数说明
GROUP BY ASC DESC WITH ROLLUP 支持
HAVING 支持
ORDER BY ASC DESC 支持
LIMIT n,m 支持
PROCEDURE 限制支持 支持单库存储过程
INTO OUTFILE 支持 1. 要求执行语句的计算节点数据库用户拥有FILE权限
2. 无论在哪台服务器上执行此语法,输出文件都将保存在当前主计算节点服务器上的固定路径:/usr/local/hhdb/hhdb-server/HDB-TEMP
3. 若输出时集群发生切换,仍能保证数据输出正常
INTO DUMPFILE 不支持
INTO 变量 不支持
FOR UPDATE 支持 不支持与NOWAIT或SKIP LOCKED连用
LOCK IN SHARE MODE 支持 与存储节点8.0的FOR SHARE功能相同,为保证向下兼容,仍保留支持
FOR SHARE 支持 支持在存储节点8.0及以上存储节点使用,不支持与NOWAIT或SKIP LOCKED连用
函数 包括聚合函数 支持 支持单表聚合函数括号外的复杂运算
DUAL 支持
FORCE INDEX 支持
USING INDEX 支持
IGNORE INDEX 支持
RECURSIVE 支持 存储节点8.0版本下,垂直表和全局表支。支持的语法如下:WITH ... SELECT ...;WITH ... UPDATE ...(外部sql的语句仅支持垂直表);WITH ... DELETE ...(外部sql的语句仅支持垂直表);SELECT ... WHERE id IN (WITH ... SELECT ...) ...;SELECT * FROM (WITH ... SELECT ...) AS dt ...

跨库SELECT语句

存储节点语句类型 子句类型 功能 状态 说明
SELECT LIMIT n,m 支持
ORDER BY 支持
ORDER BY LIMIT n,m 支持
GROUP BY ASC DESC WITH ROLLUP 支持
GROUP BY ORDER BY LIMIT m,n 支持
GROUP BY/ORDER BY字段值大小写敏感 支持
聚合函数 SELECT子句中的聚合函数 支持
HAVING子句中的聚合函数 支持
COUNT(DISTINCT) 支持
FETCH ROWS 支持
FOR UPDATE WAIT 支持
DISTINCT 支持
ROWNUM 限制支持 ROWNUM仅支持以下几种用法:
1.位于SELECT字段中,仅支持单独使用,例如SELECT ROWNUM [as xx] ,xx from table xx,用以对结果各行生成序列号,不允许ROWNUM出现在函数内部,同时不支持ROWNUM和*同时使用
2.位于WHERE字段中,仅支持位于WHERE条件最外层,并且是一个'AND'条件的分支, 用以对结果进行数量限制,仅支持“ROWNUM 比较操作符 长整型数 值”同时在一个select子句中仅允许出现一次
INTO 不支持
WHERE 函数 支持
PARTITION 支持
HAVING 支持
PROCEDURE 限制支持 支持单库存储过程
INTO OUTFILE 支持 1. 要求执行语句的计算节点数据库用户拥有FILE权限。
2. 当计算节点为集群模式时,无论在集群中哪台服务器上执行此语法,输出文件都将保存在当前主计算节点服务器上的固定路径:/usr/local/hhdb/hhdb-server/HotDB-TEMP
3. 若输出时集群发生切换,仍能保证数据输出正常。
INTO DUMPFILE 不支持
INTO 变量 不支持
FOR UPDATE 支持
LOCK IN SHARE MODE 支持
FORCE INDEX 支持
USING INDEX 支持
IGNORE INDEX 支持
STRAIGHT_JOIN 支持
OIN 限制支持 请参考跨库JOIN;
子查询 JOIN 支持
IFNULL/NULLIF 支持
UNION/UNION ALL 支持
IS NULL /IS NOT NULL 支持
PARTITION分区表 支持
AVG/SUM/MIN/MAX函数 支持
横向派生表 不支持 存储节点8.0新功能
UNION/UNION ALL join 支持

UPDATE语句

单库UPDATE语句

存储节点语句类型 子句类型 功能 支持状态 说明
UPDATE LOW_PRIORITY 支持
IGNORE 支持
ORDER BY 支持
LIMIT n 支持
SET 支持 1.允许更新分片字段,但要求分片字段值的变更不会影响数据路由,即修改后的分片字段值与修改前的值路由到相同节点,否则执行不成功
2.父子表不允许使用表达式语法更新父子表的关联字段,即使分片字段值的变更不会影响数据路由,例如SET id=id或SET id=id+3
3.不支持一条语句多次更新分片字段,例如:UPDATE table1 SET id =31,id=41 WHERE id =1;
WHERE dnid 支持 DML WHERE条件里dnid作为OR条件时,仅判断dnid条件,其他限制条件忽略
函数 支持
函数 支持
多表关联 支持
View 限制支持 支持了仅查询字段的单表视图的update操作

跨库UPDATE语句

存储节点语句类型 子句类型 功能 支持状态 说明
UPDATE ORDER BY DESC ASC 支持
LIMIT n 支持
ORDER BY DESC ASC LIMIT n,m 支持
ORDER BY字段值大小写敏感 支持
WHERE 支持
SET 支持 1.允许更新分片字段,但要求分片字段值的变更不会影响数据路由,即修改后的分片字段值与修改前的值路由到相同节点,否则执行不成功
2.父子表不允许使用表达式语法更新父子表关联字段,即使关联字段值的变更不会影响数据路由,例如SET id=id或SET id=id+3
3. 不支持一条语句多次更新分片字段,例如:UPDATE table1 SET id =31,id=41 WHERE id =1;
子句中的函数 支持
WHERE中的函数 支持
PARTITION 支持
JOIN 支持

跨库JOIN

一级功能 二级功能 三级功能 支持状态 说明
INNER/LEFT JON UNION ALL 支持
UNION 支持
HAVING 无条件字段 不支持 SELECT子句必须包含HAVING过滤字段
COUNT(*) 支持
AVG() 支持
MAX() 支持
MIN() 支持
SUM() 支持
别名 支持
ORDER BY 单字段 支持
多字段相同顺序 支持 order by column_name1 desc, column_name2 desc
多字段不同顺序 支持 order by column_name1 desc, column_name2 asc
字段别名 支持 别名不能与表中的字段名称相同
字段值大小写敏感 支持
ENUM类型 支持
函数 支持
OR 支持
WHERE 不同字段的OR条件 支持
单个字段的or条件 支持
不支持的部分使用NDB且满足NDB限制的支持
IN 支持
AND 支持
IS NOT NULL 支持
IS NULL 支持
BETWEEN ... AND ... 支持
>、>= 、< 、<= 支持
NOW()等常量表达式 支持 column1 > NOW() 或 column1 > DATE_ADD(NOW(), INTERVAL +3 day )
运算表达式 支持
LIKE 支持
GROUP BY 单字段 支持
多字段 支持
ORDER BY NULL 支持
WITH ROLLUP 支持
字段别名 支持 别名不能与表名中的字段名称相同
字段值大小写 支持
FORCE INDEX 支持
USING INDEX 支持
IGNORE INDEX 支持
AVG AVG() 支持
AVG(IFNULL()) 支持
AVG(column1-column2) 支持
COUNT COUNT() 支持
COUNT DISTINCT 支持
COUNT(*) 支持
COUNT(1) 支持
MIN MIN() 支持
MAX MAX() 支持
SUM SUM() 支持
SUM(CASE ... WHEN...) 支持
SUM(IFNULL()) 支持
SUM(column1-column2) 支持
INTO OUTFILE 支持 1. 要求执行语句的计算节点数据库用户拥有FILE权限
2. 无论在集群中哪台服务器上执行此语法,输出文件都将保存在当前主计算节点服务器上的固定路径:/usr/local/hhdb/hhdb-server/HotDB-TEMP
3. 若输出时集群发生切换,仍能保证数据输出正常
FOR UPDATE 不支持
LOCK IN SHARE MODE 不支持
子查询 支持
表别名 支持 支持使用表别名WHERE a.column或者SELECT a.column
ON子句 单个= 支持
<=> 支持
!= <> 支持
>= > <= < 支持
多个>= > <= <条件 支持
多个 and = 条件 支持
IN 支持
IS NOT NULL 支持
IS NULL 支持
BETWEEN ... AND ... 支持
LIKE 支持
or条件 支持
数学表达式 支持
SELECT子句 显示空列 支持 SELECT '' AS A FROM ... 查询结果中能正确显示空列
STRAIGHT_JOIN 支持
函数 UNIX_TIMESTAMP() 支持
NOW() 支持
DATE_FORMAT() 支持
DATE_ADD() 支持
DATEDIFF() 支持
FROM_UNIXTIME() 支持
CONVERT 支持
SUBSTRING_INDEX() 支持
SUBSTRING() 支持
TRIM() 支持
RTRIM() 支持
LTRIM() 支持
UCASE() 支持
UPPER() 支持
FLOOR() 支持
% 或 MOD 支持
RAND() 支持
TRUNCATE() 支持
/ 或 DIV 支持
ABS() 支持
LENGTH() 支持
CONCAT() 支持
CAST() 支持
IF() 支持
IFNULL 支持
CASE...WHEN...END 支持
DISTINCT 支持
USING(column) 支持
PARTITION 支持
LIMIT LIMIT n,m 支持
LIMIT n 支持
多表(三表及以上)查询 单种LEFT JOIN 支持
单种INNER JION 支持
单种NATURAL JOIN 支持
混合的LEFT/INNER JOIN/RIGHT JOIN 支持
混合的LEFT/INNER/NATURAL JOIN 支持
TABLE a ... JOIN (TABLE b,TABLE c) ... 支持
NATURAL JOIN 支持
不同节点的表JOIN 支持
JOIN UPDATE ... JOIN 支持
DELETE ... JOIN 支持

DDL语句

ALTER语句

存储节点语句类型 子句类型 支持状态 说明
ALTER TABLE ADD COLUMN 支持
ADD PRIMARY KEY/UNIQUE/FOREIGN KEY/FULLTEXT/INDEX/KEY 支持 支持ADD UNIQUE [index_name][index_type]index_col_name
父子表的ADD FOREIGN KEY 限制支持 非分片字段作为外键关联字段时,无法跨节点保证父子表数据关联性。
即在存储节点中,若父表与子表的外键值相等,则可匹配后插入数据,当非分片字段作为外键关联字段时,由于子表外键关联字段路由的节点与父表分片字段的路由节点不一致,导致子表最终路由的存储节点中找不到父表所对应的外键值,故插入失败:ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails
ADD SPATIAL [INDEX KEY] 支持
ADD CONSTRAINT [CONSTRAINT [symbol]] PRIMARY KEY/UNIQUE KEY/FOREIGN KEY 支持
父子表的ADD CONSTRAINT [CONSTRAINT [symbol]] FOREIGN KEY 限制支持 非字段作为外键关联字段时,无法跨节点保证父子表数据关联性。即在存储节点中,若父表与子表的外键值相等,则可匹配后插入数据,但当非关联字段作为外键关联字段时,由于子表外键关联字段路由的节点与父表分片字段的路由节点不一致,导致子表最终路由的存储节点中找不到父表所对应的外键值,故插入失败:ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails
ALGORITHM 支持 存储节点8.0新增INSTANT,且默认使用INSTANT
ALTER COLUMN 支持
LOCK 支持
MODIFY/CHANGE [COLUMN] 支持
DROP COLUMN 支持
DROP PRIMARY KEY/KEY/INDEX/FOREIGN KEY 支持
DISABLE KEYS 支持
ENABLE KEYS 支持
DISCARD TABLESPACE 不支持
IMPORT TABLESPACE 不支持
ADD/DROP/TRUNCATE PARTITION 支持
GENERATED COLUMNS 支持 存储节点8.0与5.7新增功能
SECONDARY INDEXES 支持 存储节点8.0与5.7新增功能
CHECK 支持 存储节点8.0新增功能
ALTER VIEW 支持
ALTER EVENT 限制支持
ALTER USER 支持

CREATE语句

存储节点语句类型 子句类型 支持状态 说明
CREATE DATABASE 支持 可支持直接创建逻辑库,功能使用说明可见表格下方补充描述。
CREATE EVENT 限制支持 垂直库场景下支持;不支持跨逻辑库的event;创建的event用户默认为存储节点的连接用户;未use库,create/alter/drop event均不支持
CREATE FUNCTION 限制支持 单库场景下可支持
CREATE INDEX FOREIGN KEY 支持
UNIQUE 支持
父子表的FOREIGN KEY 限制支持 非分片字段作为外键关联字段时,无法跨节点保证父子表数据关联性。即在存储节点中,若父表与子表的外键值相等,则可匹配后插入数据,但当非关联字段作为外键关联字段时,由于子表外键关联字段路由的节点与父表分片字段的路由节点不一致,导致子表最终路由的存储节点中找不到父表所对应的外键值,故插入失败:ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails
FULLTEXT 支持
SPATIAL 支持
ALGORITHM 支持
LOCK 支持
FUNCTIONAL KEYS 支持 存储节点8.0新增功能
CREATE TABLE CREATE TEMPORARY TABLE 禁用
CREATE TABLE [IF NOT EXISTS] 支持
CREATE TABLE LIKE 支持
CREATE TABLE AS SELECT ... 支持 1. 要求存储节点用户拥有CREATE TEMPORARY TABLE权限。
2. 要求CREATE的表和SELECT的表关联至少一个相同的数据节点,否则执行不成功:ERROR 10215 (HY000): [LOADTEST1] no overlapping datanode
3. 不支持CREATE TABLE ... IGNORE SELECT和CREATE TABLE ... REPLACE SELECT
GENERATED COLUMNS 支持 存储节点8.0与5.7新增功能
SECONDARY INDEXES 支持 存储节点8.0与5.7新增功能
CHECK 支持 存储节点8.0新增功能
CREATE TRIGGER 支持 目前仅支持单库,且需要赋予CREATE权限,内部语句不验证权限,DEFINER相关目前不支持,show trrigers时相关字段显示当前用户
CREATE VIEW 支持
CREATE USER 支持
CREATE ROLE 支持

CREATE DATABASE 在计算节点使用时对应为创建逻辑库的功能,语法使用说明如下:

CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name [create_option] ... [DEFAULT DATANODE 'datanodeid']

说明:
create_option: [DEFAULT] { CHARACTER SET [=] charset_name |
COLLATE [=] collation_name } ```[DEFAULT DATANODE
'datanodeid']可以指定默认分片节点。当不单独指定时,默认关联所有数据节点;当指定时,按指定数据节点关联成逻辑库默认分片节点;当指定的datanodeid不存在时,提示:datanodeid
not exists。

服务端创建逻辑库语法示例:

create database if not exists zjj_d3 default datanode '1,4';

关联不存在的数据节点:

DROP语句

存储节点语句类型 子句类型 支持状态 说明
DROP DATABASE 支持 支持直接删除逻辑库,功能使用说明可见表格下方补充描述。
DROP EVENT 限制支持 垂直库场景下支持
DROP FUNCTION 禁用
DROP INDEX UNIQUE 支持
普通索引KEY 支持
FOREIGN KEY 支持
FULLTEXT 支持
SPATIAL 支持
ALGORITHM 支持
LOCK 支持
DROP TABLE DROP [TEMPORARY] TABLE [IF EXISTS] 禁用
DROP TABLE 支持
DROP TABLE多表 支持 必须保证多表在相同节点
DROP TABLE table_name [RESTRICT CASCADE] 支持
DROP TRIGGER 支持 需要赋予DROP权限
DROP VIEW 支持
DROP USER 支持
DROP ROLE 支持

DROP DATABASE在计算节点使用时对应为删除逻辑库的功能,语法使用说明如下:

DROP {DATABASE | SCHEMA} [IF EXISTS] db_name

说明:

db_name为计算节点逻辑库名称;
server.xml新增参数enableDropDatabase,0为关闭,1为开启,默认值0;
当设置参数1时,可执行DROP {DATABASE | SCHEMA} [IF EXISTS] db_name语句,删除逻辑库时,若库中有表也会一起删除。
当设置参数0时,只允许删除空库,若库中有表则删除库失败。 

服务端删除逻辑库语法示例:

drop database if exists test_db;

设置enableDropDatabase=0,库中有表时提示:

设置enableDropDatabase=0且同时开启回收站功能,删除库中表后再删除库时提示:

设置enableDropDatabase=1,库中有表或开启回收站后删除表,均可以成功删除库:

TRUNCATE与RENAME语句

存储节点语句类型 子句类型 支持状态 说明
RENAME TABLE 支持 1. 支持RENAME多张表,但要求这些表都在相同节点,否则将执行失败并报错:ERROR 10042 (HY000): unsupported to rename multi table with different datanodes
2. RENAME中的目标表不需要提前添加表配置,若添加新表的表配置,需要保证新表表配置与原表一致,否则RENAME将不成功
注意:计算节点数据库用户需要对旧表拥有ALTER和DROP权限,以及对新表拥有CREATE和INSERT权限
TRUNCATE TABLE 支持
posted @   恒辉信达  阅读(5)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
点击右上角即可分享
微信分享提示