hhdb資料庫介紹(9-15)

恒辉信达發表於2024-11-29

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 支援

相關文章