库与表操作

本文档主要介绍一些简单的库与表操作示例,更多操作可参考 MySQL 官网

创建数据库

创建数据库 company,并使用该数据库

mysql> CREATE DATABASE company;
mysql> USE company;

创建表

  • 创建表 employee,指定字段 id 为自增字段,并作为该表的主键

    mysql> CREATE TABLE employee(id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(128), age INT);
  • 创建表 manager,并在字段 employee_id 上建立名为“id_idx”的索引

    mysql> CREATE TABLE manager(employee_id INT, department TEXT, INDEX id_idx(employee_id));

支持的建表选项

用户在 MySQL 上创建表时可以通过建表选项指定表属性。

选项 默认值 描述
AUTO_INCREMENT 1 自增字段的起始值,SequoiaDB 的自增字段不是严格递增,而是趋势递增;如果配置严格递增的自增字段,需将参数 AcquireSize 设置为 1,具体说明可参考 SequoiaDB 自增字段章节
CHARACTER SET utf8mb4 字符数据的字符集
COLLATE utf8mb4_bin 字符数据的比较规则,不支持忽略大小写的字符比较规则,字符比较对大小写敏感
COMMENT "" 表备注信息,用于指定更多 SequoiaDB 引擎的选项,可参考下述的自定义表配置
COMPRESSION "" 表压缩类型,选项有 ""(默认压缩类型)、"none"(关闭压缩)、"lzw"、"snappy",默认压缩类型为"lzw"
ENGINE SEQUOIADB 表存储引擎,必须指定为 SEQUOIADB 才能使用本分布式存储引擎,一般无需显式指定

示例

  • 分别通过 COMMENT 和 COMPRESSION 创建压缩类型为"snappy"的表(以下两条语句功能完全相同)

    mysql> CREATE TABLE t1 (id INT) ENGINE=SEQUOIADB COMPRESSION='snappy';
    mysql> CREATE TABLE t2 (id INT) COMMENT='sequoiadb:{table_options: {CompressionType: "snappy"}}';
  • 指定表自增字段起始值为 1000,并严格递增

    mysql> CREATE TABLE tb (id INT AUTO_INCREMENT PRIMARY KEY) COMMENT='Strict auto_increment field for example, sequoiadb:{table_options: {"AutoIncrement": {"Field": "id", "StartValue": 1000, "AcquireSize": 1}}}';

自定义表配置

用户在 MySQL 上创建表时,可以在表选项 COMMENT 中指定关键词"sequoiadb",并在其后添加一个 json 对象用于传入自定义的表配置参数。格式如下:

COMMENT [=] "[string,] sequoiadb:{ [table_options:{...}, partition_options:{...}, auto_partition:<true|false>] }"

具体配置参数

参数名 类型 描述 是否必填
string string 用户自定义注释字符串
table_options json 创建集合的相关参数,详细参数可参考 SequoiaDB 创建集合选项
partition_options json 分区的属性,用于指定 RANGE/LIST 分区表的分区属性,详细参数可参考 SequoiaDB 创建集合选项
auto_partition boolean 是否创建分区表,取值为 false 则显式创建非分区表

Note:

  • use_partition 已弃用,3.2.4 版本更名为 auto_partition。
  • 引擎配置项相应更名为 sequoiadb_auto_partition。

示例

  • 在 SequoiaDB 上创建根据时间进行范围切分的表

    mysql> CREATE TABLE business_log(ts TIMESTAMP, level INT, content TEXT, PRIMARY KEY(ts))
           ENGINE=sequoiadb
           COMMENT="Sharding table for example, sequoiadb:{table_options: {ShardingKey: {ts: 1}, ShardingType: 'range'}}";
  • 在引擎配置项 sequoiadb_auto_partition 为 ON 时,指定 auto_partition 为 false 显式创建普通表

    mysql> CREATE TABLE employee(id INT PRIMARY KEY, name VARCHAR(128) UNIQUE KEY)
           ENGINE=sequoiadb
           COMMENT='sequoiadb:{auto_partition: false}';
  • 在 SequoiaDB 上创建压缩类型为"lzw"的表,通过 ALTER TABLE 修改表压缩类型为"snappy"

    mysql> CREATE TABLE employee2(id INT PRIMARY KEY, name VARCHAR(128) UNIQUE KEY)
           ENGINE=sequoiadb
           COMMENT="sequoiadb:{auto_partition: true, table_options: {CompressionType: 'lzw'}}";
    
    mysql> ALTER TABLE employee2 COMMENT="alter table of compress type,sequoiadb:{auto_partition: true,
           table_options: {CompressionType: 'snappy'}}";

    Note:

    ALTER TABLE 支持修改表备注(COMMENT)中的自定义注释,以及更改或追加 table_options 中的配置项,不支持修改 auto_partition。

  • 为分区指定 hash 切片数 Partition 属性,在表备注中指定 partition_options 等价于在每个分区备注中单独指定 partition_options(以下两个语句效果完全一致)

    mysql> CREATE TABLE goods (
        id INT NOT NULL,
        produced_date DATE,
        name VARCHAR(100),
        company VARCHAR(100)
    )
    COMMENT 'sequoiadb:{partition_options: {Partition: 8192}}'
    PARTITION BY RANGE COLUMNS (produced_date)
    SUBPARTITION BY KEY (id)
    SUBPARTITIONS 2 (
        PARTITION p0 VALUES LESS THAN ('1990-01-01'),
        PARTITION p1 VALUES LESS THAN ('2000-01-01'),
        PARTITION p2 VALUES LESS THAN ('2010-01-01')
    );
    
    mysql> CREATE TABLE goods (
        id INT NOT NULL,
        produced_date DATE,
        name VARCHAR(100),
        company VARCHAR(100)
    )
    PARTITION BY RANGE COLUMNS (produced_date)
    SUBPARTITION BY KEY (id)
    SUBPARTITIONS 2 (
        PARTITION p0 VALUES LESS THAN ('1990-01-01')
            COMMENT 'sequoiadb:{"partition_options": {Partition: 8192}}',
        PARTITION p1 VALUES LESS THAN ('2000-01-01')
            COMMENT 'sequoiadb:{"partition_options": {Partition: 8192}}',
        PARTITION p2 VALUES LESS THAN ('2010-01-01')
            COMMENT 'sequoiadb:{"partition_options": {Partition: 8192}}'
    );

创建索引

在表 employee 中创建名为“name_idx”的索引

mysql> ALTER TABLE employee ADD INDEX name_idx(name(30));

删除表

删除表 employee 和 manager

mysql> DROP TABLE employee, manager;

删除数据库

删除数据库 company

mysql> DROP DATABASE company;
回到顶部