RadonDB 数据定义语句(DDL)完全指南
概述
RadonDB 作为一款分布式数据库,支持标准 SQL 的数据定义语言(DDL)操作。本文将详细介绍 RadonDB 中的各类 DDL 语句,包括数据库操作、表操作、索引操作等,帮助开发者更好地理解和使用 RadonDB 的数据定义功能。
数据库操作
创建数据库
RadonDB 使用标准的 CREATE DATABASE
语法创建数据库:
CREATE DATABASE db_name
[DEFAULT CHARACTER SET charset_name]
[DEFAULT COLLATE collation_name]
[ENCRYPTION {'Y' | 'N'}]
特点说明:
- 支持
IF NOT EXISTS
语法避免重复创建 - 可以指定字符集和排序规则
- 支持 MySQL 8.0.16 引入的
ENCRYPTION
选项设置数据库默认加密 - 操作会广播到所有后端节点执行,属于跨分区非原子操作
示例:
CREATE DATABASE testdb DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_bin;
修改数据库
使用 ALTER DATABASE
修改数据库属性:
ALTER DATABASE db_name
[DEFAULT CHARACTER SET charset_name]
[DEFAULT COLLATE collation_name]
[ENCRYPTION {'Y' | 'N'}]
[READ ONLY {DEFAULT | 0 | 1}]
注意事项:
- 如果不指定数据库名,则修改当前会话的默认数据库
- 完全兼容 MySQL 8.0 语法
- 不支持 5.7 版本的
UPGRADE DATA DIRECTORY NAME
特性
删除数据库
删除数据库语法简单直接:
DROP DATABASE [IF EXISTS] db_name
表操作
创建表
RadonDB 的表创建语法丰富,支持多种分区方式:
CREATE TABLE [IF NOT EXISTS] tbl_name
(column_definitions)
[table_options]
[partition_options]
分区选项详解:
-
HASH 分区:
PARTITION BY HASH(shard_key) [PARTITIONS num]
- 根据分区键的哈希值均匀分布数据
- 可指定分区数量
-
LIST 分区:
PARTITION BY LIST(shard_key)( PARTITION backend1 VALUES IN (1,3,5), PARTITION backend2 VALUES IN (2,4,6) )
- 显式指定每个分区包含的值
- 插入未定义的值会报错
-
全局表(GLOBAL):
GLOBAL
- 每个后端节点都有完整数据
- 适合小表且需要频繁关联查询的场景
-
单表(SINGLE):
SINGLE
- 只存储在第一个后端节点
- 适合不需要分布的小表
-
指定后端单表:
DISTRIBUTED BY (backend_name)
- 数据存储在指定后端节点
注意事项:
- 默认使用 InnoDB 引擎
- 默认字符集为 UTF-8
- 不支持临时表、CREATE TABLE AS/LIKE 语法
- 不支持外键约束
- 分区键只能指定一列,不能是 BINARY/NULL 类型
修改表结构
RadonDB 支持多种表结构修改操作:
ALTER TABLE tbl_name
[ADD COLUMN (col_name column_definition,...)]
[DROP COLUMN col_name]
[MODIFY COLUMN col_name column_definition]
[ENGINE = engine_name]
[CONVERT TO CHARACTER SET charset_name]
重要限制:
- 不能删除或修改分区键所在的列
- 修改操作是跨分区非原子性的
示例:
-- 添加列
ALTER TABLE t1 ADD COLUMN (b int, c varchar(100));
-- 修改列类型
ALTER TABLE t1 MODIFY COLUMN b bigint;
-- 修改存储引擎
ALTER TABLE t1 ENGINE=TokuDB;
-- 修改字符集
ALTER TABLE t1 CONVERT TO CHARACTER SET utf8mb4;
删除表
删除表语法简单:
DROP TABLE [IF EXISTS] tbl_name
清空表
快速清空表数据:
TRUNCATE TABLE tbl_name
索引操作
创建索引
RadonDB 支持创建多种类型索引:
CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name
ON tbl_name (col1, col2...)
[USING {BTREE|HASH}]
[ALGORITHM {DEFAULT|INPLACE|COPY}]
[LOCK {DEFAULT|NONE|SHARED|EXCLUSIVE}]
删除索引
删除索引语法:
DROP INDEX index_name ON tbl_name
[ALGORITHM {DEFAULT|INPLACE|COPY}]
[LOCK {DEFAULT|NONE|SHARED|EXCLUSIVE}]
索引操作特点:
- 基于路由信息发送到对应后端执行
- 跨分区非原子操作
最佳实践
-
分区键选择:
- 选择区分度高、查询频繁的列作为分区键
- 避免频繁更新的列作为分区键
-
表类型选择:
- 大表使用 HASH 分区
- 小配置表使用 GLOBAL 表
- 不需要分布的中间表使用 SINGLE 表
-
字符集选择:
- 需要存储 emoji 等特殊字符时使用 utf8mb4
- 纯英文数据可使用 latin1 节省空间
-
索引设计:
- 为高频查询条件创建索引
- 避免过多索引影响写入性能
总结
RadonDB 提供了丰富的 DDL 功能,支持标准的数据库和表操作,并针对分布式场景做了特别设计。理解这些数据定义语句的特点和限制,能够帮助开发者更好地设计 RadonDB 数据库结构,构建高性能的分布式应用。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考