注意
仅V5.1.20.0.13及以后版本的实例,支持使用本文介绍的DDL语句。
创建数据库(create db)
语法
CREATE DATABASE [IF NOT EXISTS] db_name
[create_option]
create_option:
[DEFAULT]
[CHARACTER SET charset_name]
[COLLATE collation_name]
{ [partition_option] | [sharding_hint] }
partition_option:
[DN [=] 'dn_name[,dn_name...]']
[PARTITIONS [=] dn_partition_number]
sharding_hint:
/* sharding @@database name="{db_name}" set datasource ="{rds1}:{rds_number1},{rds2}:{rds_number2}" and number={统一分片数量} */参数说明
db_name: 待创建的数据库名称。长度限制为大于等于3且小于51个字符。CHARACTER SET: 指定数据库的字符集。支持设置为utf8和utf8mb4字符集。COLLATE: 指定数据库的排序规则。支持设置为utf8_general_ci和utf8mb4_bin排序规则。
注意
如果指定了
CHARACTER SET但未指定COLLATE,则默认补充为:utf8的
COLLATE: utf8_general_ciutf8mb4的
COLLATE:utf8mb4_bin
如果未指定
CHARACTER SET和COLLATE,默认为utf8mb4/utf8mb4_bin。
DN/PARTITIONS:SQL风格的分片信息,用于为简单使用场景指定数据库分片与RDS数据源。DN:指定RDS数据源列表,默认值为show rdslist命令获取的RDS列表。PARTITIONS:指定各个RDS上统一的分片数量,默认值为1 。
sharding:HINT风格的分片信息,用于指定数据库分片到多个 RDS数据源上。@@database name="{db_name}":指定数据库名称。set datasource ="{rds1}:{rds_number1},{rds2}:{rds_number2}":指定RDS数据源及其分片数量。and number={统一分片数量}:指定统一分片数量。
其中:
SQL风格的分片信息与HINT风格的分片信息虽然写法不同,但作用相同,因此只需使用其中一种写法即可。
注意
在简单使用场景下,只需选择SQL风格分片写法或者HINT风格分片写法一种即可。由于HINT风格分片写法的功能更强大,可以为不同RDS数据源指定不同的分片数量,在复杂使用场景下,当需要为不同RDS数据源指定不同的分片数量时,只能使用HINT风格分片写法。
如果同时省略两者,即不指定SQL风格分片信息与 HINT风格分片信息,则数据源将默认为
show rdslist命令获取的RDS列表,且每个RDS的分片数量默认为1。假设有一个DRDS集群使用
show rdslist命令获取的RDS列表包含udal3307、udal3308两个数据源,当使用如下SQL语句来建库:CREATE DATABASE my_db;等同于使用如下SQL风格分片信息的SQL语句来建库:
CREATE DATABASE my_db DN ‘udal3307,udal3308’PARTITIONS 1;或等同于使用如下HINT风格分片信息的SQL语句来建库:
CREATE DATABASE my_db/* sharding @@database name="my_db" set datasource ="udal3307:1,udal3308:1" and number=1 */;
语法示例
示例1:
假设有一个DRDS集群中关联了3个RDS,分别为udal3307、udal3308和udal3309,使用如下HINT风格分片写法的SQL语句将创建逻辑库my_db,并在udal3307和udal3308上各创建2个分片:
CREATE DATABASE my_db /* sharding @@database name="my_db" set datasource ="udal3307:2,udal3308:2" and number=2 */;等同于使用如下SQL风格分片写法的SQL:
CREATE DATABASE my_db DN "udal3307,udal3308" PARTITIONS 2;示例2:
假设有一个DRDS集群中关联了3个RDS,分别为udal3307、udal3308和udal3309,使用如下HINT风格分片写法的SQL语句将创建逻辑库my_db2,并在每个RDS上都创建3个分片:
CREATE DATABASE my_db2 /* sharding @@database name="my_db2" set datasource ="udal3307,udal3308,udal3309" and number=3 */;注意
在如上写法中,datasource必须显式写出,不能忽略。
而使用SQL风格分片写法来达到同等效果的SQL语句如下:
CREATE DATABASE my_db2 PARTITIONS 3;注意
此时省略了DN参数,系统会使用show rdslist命令获取的RDS列表,即当前关联的所有RDS(udal3307、udal3308和udal3309)来作为数据源。
示例3:
假设有一个DRDS集群中关联了3个RDS,分别为udal3307、udal3308和udal3309,使用如下HINT风格分片写法的SQL语句将创建逻辑库my_db3,并在udal3307和udal3308上创建2个分片,在udal3309上创建3个分片:
CREATE DATABASE my_db3 /* sharding @@database name=”my_db3” set datasource=”udal3307:2,udal3308:2,udal3309:3” */此时,由于需要在不同RDS数据源上指定不同的分片数量,SQL风格分片写法不支持该场景,因此只能使用HINT风格分片的写法。
查看数据库信息(show rdslist)
语法
SHOW RDSLIST语法示例
mysql> show rdslist;
+----------+
| RDS_NAME |
+----------+
| udal3307 |
| udal3308 |
+----------+
2 rows in set (0.02 sec)删除数据库(drop db)
语法
您可以使用DROP DATABASE删除数据库中的所有表并删除数据库。
DROP DATABASE [IF EXISTS] db_name参数说明
db_name:待删除的数据库名称。