DDL 语法
在使用数据访问代理时,您可以通过 DDL 语句完成建库建表等操作。
DDL 基本语句
创建数据表
CREATE TABLE IF NOT EXISTS `table_name`( id INTEGER NOT NULL PRIMARY KEY, name VARCHAR(20) NOT NULL, age INTEGER NOT NULL );
删除数据表
DROP TABLE table_name;
修改数据表
/* 修改字段名 */ ALTER TABLE table_name CHANGE name name1 VARCHAR(255); /* 修改字段类型 */ ALTER TABLE table_name MODIFY name1 VARCHAR(64); /* 添加字段(默认添加至数据表末尾)*/ ALTER TABLE table_name ADD COLUMN address VARCHAR(20) DEFAULT NULL; /* 添加主键 */ ALTER TABLE table_name ADD PRIMARY KEY (id); /* 添加唯一约束 */ ALTER TABLE table_name ADD UNIQUE uni_name1 (name1);
添加索引
/* 创建索引 */ CREATE INDEX idx_addr ON table_name (address); /* 使用 ALTER TABLE 语句添加索引 */ ALTER TABLE table_name ADD INDEX idx_addr (address); /* 创建唯一索引 */ CREATE UNIQUE INDEX uni_addr ON table_name (address);
删除索引
/* 删除索引 */ DROP INDEX idx_addr ON table_name; /* 使用 ALTER TABLE 语句删除索引 */ ALTER TABLE table_name DROP INDEX idx_addr;
使用限制
当您在数据访问代理中使用 DDL 语句时,请注意以下限制:
CREATE TABLE 语句不支持 FOREIGN KEY 约束。
COMMENT 关键字不支持分号(;)。
Sharding DDL 语句
数据库访问代理在控制台的任务管理与服务端上均支持了 Sharding DDL 功能,即带有拆分规则的建库建表语句。
创建数据库
新建库:
CREATE DATABASE IF NOT EXISTS my_db -- MYSQL 原生 default character set utf8 -- MYSQL 原生 [SHARDS 100]--扩展:【通用】分库数属性
复用已有库:
CREATE DATABASE tradequery_db EXTENDS trade_db;
创建数据表
当需要创建的表数量较少时,您可以在控制台页面中填写表名、分表数量、选择分库分表拆分键和规则,再输入建表语句完成逻辑表和物理表的创建。
当需要创建的表数量较多时,您可以通过下面的 SQL 语句完成逻辑表和物理表的创建,提高建表的效率。
CREATE TABLE [IF NOT EXISTS] `table_name`( id int(11) not null, user_id varchar(32) not null, age int(11) not null ) DBSHARD BY HASH (col) TBSHARD BY HASH (dol) SHARDS NUMS --分表数量
例如:
CREATE TABLE IF NOT EXISTS `user`( id int(11) not null, user_id varchar(32) not null, age int(11) not null ) [ DBSHARD BY HASH (user_id) ] --可选,根据字段 user_id 进行分库 TBSHARD BY HASH (user_id) --根据字段 user_id 进行分表 SHARDS 100 --分 100 个表
说明如果表均匀分布在物理库上,DBSHARD 可以省略,DBP 会自动根据 TBSHARD 计算出分库规则。
单拆分列
字符串截断:字符串截断是数据访问代理应用最多的拆分规则,可以配合
substr(str,pos,len)
函数一起使用。CREATE TABLE [IF NOT EXISTS] `table_name`( id int(11) not null, user_id varchar(32) not null, age int(11) not null ) [ DBSHARD BY HASH (substr(user_id,-4,2)) ] --可选 TBSHARD BY HASH (substr(user_id,-4,2)) SHARDS 100
HASH
CREATE TABLE [IF NOT EXISTS] `table_name`( id int(11) not null, user_id varchar(32) not null, age int(11) not null ) DBSHARD BY HASH (id) TBSHARD BY HASH (id) SHARDS 100
说明使用 HASH 函数拆分,拆分键必须为整数类型。
拆分列必须要包含在建表语句中。
TOINT
CREATE TABLE [IF NOT EXISTS] `table_name`( id int(11) not null, user_id varchar(32) not null, age int(11) not null ) DBSHARD BY TOINT(id) TBSHARD BY TOINT(id) SHARDS 100