DDL 语法

更新时间: 2023-07-26 16:16:16

在使用数据访问代理时,您可以通过 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
上一篇: 管理 DDL 任务 下一篇: SELECT 语法
阿里云首页 金融分布式架构 相关技术圈