全部產品
Search
文件中心

Tablestore:DDL 操作

更新時間:Jun 06, 2026

Table Store的 DDL 操作用於為已有資料表或多元索引建立 SQL 映射關係,以及管理映射表的結構和元資訊。

DDL 語句概覽

語句

引擎

說明

CREATE TABLE

tablestore

為資料表建立映射關係,SQL 引擎自動選擇合適的索引執行查詢

CREATE TABLE

searchindex

為多元索引建立映射關係,SQL 引擎通過指定的多元索引執行查詢

ALTER TABLE

-

為已有映射表添加或刪除屬性列

DROP MAPPING TABLE

-

刪除映射關係(不影響底層資料表或索引)

DESCRIBE

-

查詢映射表的欄位名稱、欄位類型、主鍵等描述資訊

SHOW INDEX

-

查詢映射表關聯的索引資訊(主鍵、二級索引、多元索引)

SHOW TABLES

-

列出當前執行個體中所有映射表的名稱

說明

與傳統關係型資料庫不同,Table Store的 CREATE TABLE 不建立物理表,而是為已有的資料表或多元索引建立 SQL 訪問映射。DROP MAPPING TABLE 只刪除映射關係,不影響底層資料。

建立資料表映射關係

執行 CREATE TABLE 語句,使用 ENGINE='tablestore' 為已有資料表建立映射關係。建立後,SQL 引擎自動選擇合適的索引(資料表主鍵、二級索引或多元索引)執行查詢。

文法

CREATE TABLE [IF NOT EXISTS] table_name(
  column_name data_type [NOT NULL | NULL], ...
  PRIMARY KEY(key_part [, key_part])
)
ENGINE='tablestore',
ENGINE_ATTRIBUTE='{"consistency": consistency [,"allow_inaccurate_aggregation": allow_inaccurate_aggregation]}';

當表只有一個主鍵時,也可以將 PRIMARY KEY 直接標註在列定義上:

CREATE TABLE [IF NOT EXISTS] table_name(
  column_name data_type PRIMARY KEY,
  column_name data_type [NOT NULL | NULL], ...
)
ENGINE='tablestore',
ENGINE_ATTRIBUTE='{"consistency": consistency}';

參數

參數

是否必選

說明

IF NOT EXISTS

指定後,映射表已存在時不報錯,靜默返回成功。未指定時,映射表已存在會返回 Table already exists 錯誤。

table_name

映射表名稱,必須與資料表名稱相同。

column_name

列名。SQL 中的列名必須和資料表中的列名等效(大小寫不敏感),例如資料表中列名為 Aa,SQL 中可使用 AaAAaAaa

data_type

列的 SQL 資料類型,必須與資料表中列的資料類型匹配。主鍵列僅支援 BIGINT、VARCHAR(1024) 和 VARBINARY(1024),屬性列額外支援 DOUBLE、BOOL、MEDIUMTEXT 和 MEDIUMBLOB,詳細映射見SQL資料類型映射

NOT NULL \ NULL

列值是否允許為 NULL。主鍵列預設 NOT NULL,屬性列預設 NULL。當某屬性列值不能為 NULL 時,指定該列為 NOT NULL。

PRIMARY KEY

主鍵定義,必須與資料表的主鍵列一致(順序和類型)。

ENGINE

執行引擎類型。預設為 tablestore,表示 SQL 引擎自動選擇合適的索引。

consistency

查詢結果一致性。取值 strong(強一致性)或 eventual(最終一致性,預設值)。設為 strong 後,SQL 引擎不會自動選擇多元索引(多元索引為最終一致性)。

allow_inaccurate_aggregation

是否允許通過犧牲彙總精度提升查詢效能。預設為 true。設為 false 後,SQL 引擎不會自動選擇多元索引進行彙總計算。使用多元索引映射表時,此參數固定為 true

樣本

為 exampletable 建立映射關係,包含主鍵列 colvalue(VARCHAR)和 id(BIGINT),以及屬性列 content(MEDIUMTEXT):

CREATE TABLE exampletable(colvalue VARCHAR(1024), id BIGINT, content MEDIUMTEXT, PRIMARY KEY(colvalue, id)) ENGINE='tablestore';

建立強一致性查詢的映射關係:

CREATE TABLE exampletable2(id BIGINT(20), colvalue VARCHAR(1024), content MEDIUMTEXT, PRIMARY KEY(colvalue, id)) ENGINE_ATTRIBUTE='{"consistency": "strong"}';

建立多元索引映射關係

執行 CREATE TABLE 語句,使用 ENGINE='searchindex' 為已有多元索引建立映射關係。建立後,SQL 引擎通過指定的多元索引執行查詢。

適用情境

  • 需要使用多元索引的特有查詢能力(如全文檢索索引、向量檢索、巢狀型別查詢等)。

  • 需要固定查詢路由,確保每次查詢都使用指定的多元索引,而非由 SQL 引擎自動選擇。

文法

CREATE TABLE [IF NOT EXISTS] user_defined_name(
  column_name data_type [, column_name data_type]
)
ENGINE='searchindex',
ENGINE_ATTRIBUTE='{"index_name": index_name, "table_name": table_name}';

參數

參數

是否必選

說明

IF NOT EXISTS

指定後,映射表已存在時不報錯,靜默返回成功。

user_defined_name

自訂映射表名稱,無需與資料表或索引名相同。

column_name

列名,無需定義主鍵。多元索引映射表不支援 VARCHAR 類型,字串類型的列統一使用 MEDIUMTEXT。

index_name

多元索引名稱。在 ENGINE_ATTRIBUTE 中配置,必須指向已有的多元索引。

table_name

多元索引所屬的資料表名稱。在 ENGINE_ATTRIBUTE 中配置。

樣本

為 exampletable1 資料表的多元索引 exampletable1_index 建立映射表 search_exampletable1:

CREATE TABLE search_exampletable1(id BIGINT, colvalue MEDIUMTEXT, content MEDIUMTEXT) ENGINE='searchindex' ENGINE_ATTRIBUTE='{"index_name": "exampletable1_index", "table_name": "exampletable1"}';

使用 IF NOT EXISTS 避免重複建立報錯:

CREATE TABLE IF NOT EXISTS search_exampletable1(id BIGINT, colvalue MEDIUMTEXT, content MEDIUMTEXT) ENGINE='searchindex' ENGINE_ATTRIBUTE='{"index_name": "exampletable1_index", "table_name": "exampletable1"}';

更新映射表屬性列

執行 ALTER TABLE 語句為已有映射表添加或刪除屬性列。

說明
  • 只有通過 CREATE TABLE 語句建立的映射表才支援 ALTER TABLE,通過 DESCRIBE 等操作自動綁定的映射表不支援。

  • 每次僅支援添加或刪除一列,多列操作需重複執行。

  • ALTER TABLE 只更新映射表的 Schema,不影響資料表的儲存結構。

  • 不支援添加或刪除主鍵列。

  • 執行後 SQL 引擎非同步重新整理,最多 30 秒完成。重新整理期間查詢可能不返回新列。

文法

ALTER TABLE table_name option column_name [data_type];

參數

參數

是否必選

說明

table_name

映射表名稱。

option

操作類型:ADD COLUMN(添加屬性列)或 DROP COLUMN(刪除屬性列)。

column_name

列名。添加時不能與已有列名重複,列名大小寫規則與 CREATE TABLE 一致。

data_type

ADD COLUMN

列的 SQL 資料類型,必須與資料表中對應列的類型匹配。DROP COLUMN 時不需要。

樣本

為映射表添加屬性列:

ALTER TABLE exampletable ADD COLUMN colvalue BIGINT;
ALTER TABLE exampletable ADD COLUMN content MEDIUMTEXT;

刪除映射表的屬性列:

ALTER TABLE exampletable DROP COLUMN colvalue;

刪除映射關係

執行 DROP MAPPING TABLE 語句刪除映射關係。支援同時刪除多個映射關係。

說明

DROP MAPPING TABLE 只刪除映射關係,底層的資料表和資料不受影響。

文法

DROP MAPPING TABLE [IF EXISTS] table_name, ...;

參數

參數

是否必選

說明

table_name

映射表名稱,多個表名用半形逗號(,)分隔。

IF EXISTS

指定後,映射關係不存在時不報錯,靜默返回成功。未指定時,映射關係不存在會返回 Unknown mapping table 錯誤。

樣本

DROP MAPPING TABLE IF EXISTS exampletable;

查詢表的描述資訊

執行 DESCRIBE 語句查詢映射表的欄位名稱、欄位類型、是否可為空白、是否為主鍵等描述資訊。

文法

DESCRIBE table_name;

參數

參數

是否必選

說明

table_name

映射表名稱。

樣本

查詢 exampletable 映射表的描述資訊:

DESCRIBE exampletable;

返回結果包含以下列:

返回列

樣本值

說明

Field

pk1

欄位名稱

Type

varchar(1024)

欄位的 SQL 資料類型

Null

NO

是否允許為空白。主鍵列為 NO,屬性列為 YES

Key

PRI

主鍵標識。PRI 表示主鍵列,空值表示屬性列

查詢索引描述資訊

執行 SHOW INDEX 語句查詢映射表關聯的索引資訊,包括主鍵索引、二級索引和多元索引。

文法

SHOW INDEX {FROM | IN} table_name;

參數

參數

是否必選

說明

table_name

映射表名稱。FROMIN 等效,均可使用。

樣本

查詢資料表映射關係的索引資訊(返回主鍵、二級索引、多元索引):

SHOW INDEX IN exampletable;

返回結果中,Index_type 列標識索引類型:空值為主鍵索引,GlobalIndex 為二級索引,SearchIndex 為多元索引。

查詢多元索引映射關係的索引資訊:

SHOW INDEX IN search_exampletable1;

多元索引映射表的 SHOW INDEX 結果中,主鍵索引對應 _system_hidden_pk_field(系統隱藏主鍵),各列額外顯示 Search_type(如 LONGKEYWORDTEXT)。

列出映射表

執行 SHOW TABLES 語句列出當前執行個體中所有映射表的名稱。

文法

SHOW TABLES;

返回結果樣本:

+------------------------+
| Tables_in_myinstance   |
+------------------------+
| exampletable           |
+------------------------+
| search_exampletable1   |
+------------------------+

常見錯誤

錯誤資訊

觸發語句

原因與解決方案

Table 'instance.table' doesn't exist

CREATE TABLE

資料表不存在。CREATE TABLE 只能為已有的資料表或多元索引建立映射,確認資料表已建立。

Table 'instance.table' already exists

CREATE TABLE

映射關係已存在。如果要忽略此錯誤,使用 IF NOT EXISTS;如果要重建,先執行 DROP MAPPING TABLE 再建立。

Unknown mapping table 'instance.table'

DROP MAPPING TABLE

映射關係不存在。如果要忽略此錯誤,使用 IF EXISTS

Unsupported alter non-mapping table

ALTER TABLE

目標表不是通過 CREATE TABLE 建立的映射表(可能是自動綁定的映射表),不支援 ALTER TABLE 操作。