OceanBase 数据库 MySQL 模式下的 DDL 新特性包括变更主键、变更分区类型、变更列类型和修改字符集。
OceanBase 数据库 MySQL 模式下的变更主键操作包括添加主键、修改主键和删除主键。
添加主键的语法如下:
ALTER TABLE table_name ADD PRIMARY KEY (column_name);
添加主键的示例如下:
obclient> CREATE TABLE tbl1(c1 INT,c2 VARCHAR(50)); Query OK, 0 rows affected obclient> ALTER TABLE tbl1 ADD PRIMARY KEY(c1); Query OK, 0 rows affected
修改主键的语法如下:
ALTER TABLE table_name DROP PRIMARY KEY,ADD PRIMARY KEY (column_name_list);
修改主键的示例如下:
obclient> ALTER TABLE tbl1 DROP PRIMARY KEY,ADD PRIMARY KEY(c2); Query OK, 0 rows affected
删除主键的语法如下:
ALTER TABLE table_name DROP PRIMARY KEY;
删除主键的示例如下:
obclient> ALTER TABLE tbl1 DROP PRIMARY KEY; Query OK, 0 rows affected
OceanBase 数据库 MySQL 模式下变更分区类型的语法如下:
ALTER TABLE table_name PARTITION BY (partition_definitions);
示例 1:将 Hash 分区更改为 Key 分区方式。
obclient> CREATE TABLE tbl2(c1 INT, c2 DATETIME, PRIMARY KEY(c1, c2)) PARTITION BY HASH(c1) PARTITIONS 4; Query OK, 0 rows affected obclient> ALTER TABLE tbl2 PARTITION BY KEY(c1) PARTITIONS 10; Query OK, 0 rows affected
示例 2:将一级 Hash 分区表修改为模板化 Hash+Range 二级分区表。
obclient> ALTER TABLE tbl2
PARTITION BY HASH(c1)
SUBPARTITION BY RANGE COLUMNS(c2)
SUBPARTITION TEMPLATE(
SUBPARTITION p1 VALUES LESS THAN ('2016-10-10'),
SUBPARTITION p2 VALUES LESS THAN ('2116-3-30')) PARTITIONS 2;
Query OK, 0 rows affected
示例 3:将 Hash + Range 二级分区表转为 Range Columns+Range Columns 分区。
obclient> ALTER TABLE tbl2
PARTITION BY RANGE COLUMNS(c1)
SUBPARTITION BY RANGE COLUMNS(c2)
(
PARTITION p0 VALUES LESS THAN (100)
(SUBPARTITION sp0 VALUES LESS THAN ('2020-01-01')
,SUBPARTITION sp1 VALUES LESS THAN ('2021-01-01')
,SUBPARTITION sp2 VALUES LESS THAN ('2022-01-01')
,SUBPARTITION sp3 VALUES LESS THAN ('2023-01-01')
),
PARTITION p1 VALUES LESS THAN (200)
(SUBPARTITION sp4 VALUES LESS THAN ('2020-01-01')
,SUBPARTITION sp5 VALUES LESS THAN ('2021-01-01')
,SUBPARTITION sp6 VALUES LESS THAN ('2022-01-01')
,SUBPARTITION sp7 VALUES LESS THAN ('2023-01-01'))
);
Query OK, 0 rows affected
OceanBase 数据库 MySQL 模式下所支持的列类型的相关转换如下:
CHAR、
VARCHAR、
TINYTEXT、
TEXT 和
LONGTEXT。TINYINT、
SMALLINT、
MEDIUMINT、
INT 和
BIGINT。BINARY、
VARBINARY、
BLOB、
TINYBLOB、
MEDIUMBLOB 和
LONGBLOB。VARCHAR、
FLOAT、
DOUBLE 和
DECIMAL。FLOAT、
DOUBLE 和
DECIMAL。INT、
VARCHAR、
DOUBLE、
FLOAT 和
DECIMAL。修改列类型的语法如下:
ALTER TABLE table_name MODEFY column_name data_type;
如下示例为修改字符数据类型列的数据类型并提升长度。
obclient> CREATE TABLE test01 (c1 INT PRIMARY KEY, c2 CHAR(10), c3 CHAR(10)); Query OK, 0 rows affected obclient> ALTER TABLE test01 MODIFY C2 VARCHAR(20); Query OK, 0 rows affected obclient> ALTER TABLE test01 MODIFY C2 VARCHAR(40); Query OK, 0 rows affected obclient> ALTER TABLE test01 MODIFY C2 TINYTEXT; Query OK, 0 rows affected obclient> ALTER TABLE test01 MODIFY C2 LONGTEXT; Query OK, 0 rows affected obclient> ALTER TABLE test01 MODIFY C3 CHAR(20); Query OK, 0 rows affected obclient> ALTER TABLE test01 MODIFY C3 VARCHAR(30); Query OK, 0 rows affected
示例 1:修改整数类型列的数据类型并提升长度。
obclient> CREATE TABLE test02 (id INT PRIMARY KEY, name VARCHAR(10),age TINYINT, description VARCHAR(65525)); Query OK, 0 rows affected obclient> ALTER TABLE test02 MODIFY age SMALLINT; Query OK, 0 rows affected obclient> ALTER TABLE test02 MODIFY age INT; Query OK, 0 rows affected obclient> ALTER TABLE test02 MODIFY age BIGGINT; Query OK, 0 rows affected
示例 2:修改带精度的数据类型列的数据类型和长度。
obclient> CREATE TABLE test03(c1 INT, c2 FLOAT(8,2), c3 FLOAT(8,2), UNIQUE(c2, c3)); Query OK, 0 rows affected obclient> ALTER TABLE test03 MODIFY c2 FLOAT(5,2); Query OK, 0 rows affected obclient> ALTER TABLE test03 MODIFY c2 DOUBLE(10,4); Query OK, 0 rows affected obclient> ALTER TABLE test03 MODIFY c2 DOUBLE(5,2); Query OK, 0 rows affected obclient> ALTER TABLE test03 MODIFY c2 DECIMAL(20, 4); Query OK, 0 rows affected
obclient> CREATE TABLE test04 (c1 TINYBLOB, c2 BINARY(64)); Query OK, 0 rows affected obclient> ALTER TABLE test04 MODIFY c1 BLOB; Query OK, 0 rows affected obclient> ALTER TABLE test04 MODIFY c1 BINARY(256); Query OK, 0 rows affected obclient> CREATE TABLE test05 (id INT PRIMARY KEY, name TINYTEXT,age INT, description VARCHAR(65535)); Query OK, 0 rows affected obclient> ALTER TABLE test05 MODIFY name VARCHAR(256); Query OK, 0 rows affected
obclient> CREATE TABLE test06 (c1 INT); Query OK, 0 rows affected obclient> ALTER TABLE test06 MODIFY c1 VARCHAR(64); Query OK, 0 rows affected obclient> CREATE TABLE test07 (c1 VARCHAR(32)); Query OK, 0 rows affected obclient> ALTER TABLE test07 MODIFY c1 INT; Query OK, 0 rows affected
OceanBase 数据库 MySQL 模式下修改表的字符序和字符集的语法如下:
ALTER TABLE table_name CHARACTER SET = charset_name COLLATE =collate_name;
说明
此语法只修改表所在的 Schema 上的字符序和字符集,只对之后新增加的表起作用。
示例如下:
obclient> CREATE TABLE test_collation (c1 INT PRIMARY KEY, c2 VARCHAR(32), c3 VARCHAR(32), UNIQUE KEY idx_test_collation_c2(c2)); Query OK, 0 rows affected obclient> ALTER TABLE test_collation CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin; Query OK, 0 rows affected
OceanBase 数据库 MySQL 模式下修改表中已有数据的字符集和字符序的语法如下:
ALTER TABLE table_name CONVERT TO CHARACTER SET charset_name COLLATE collate_name;
说明
此语法不仅修改了表上已有数据的字符集和字符序,也会修改表所在的 Schema 上的字符序和字符集。
示例如下:
obclient> ALTER TABLE test_collation CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin; Query OK, 0 rows affected
OceanBase 数据库 MySQL 模式下修改列的字符序和字符集的语法如下:
ALTER TABLE table_name MODIFY COLUMN column_name data_type COLLATE collate_name;
示例如下:
obclient> ALTER TABLE test_collation MODIFY COLUMN c2 VARCHAR(32) COLLATE utf8mb4_bin; Query OK, 0 rows affected
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70026124/viewspace-2932832/ ,如需转载,请注明出处,否则将追究法律责任。