OceanBase学习之路11|体验 DDL 新特性(Oracle 模式)

OceanBase 数据库 Oracle 模式下的 DDL 新特性包括变更主键、变更分区类型和变更列类型。

变更主键

OceanBase 数据库 Oracle 模式下的主键操作包括添加主键、修改主键和删除主键。

添加主键

添加主键的语法如下:

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 MODIFY PRIMARY KEY (column_name);

修改主键的示例如下:

obclient> ALTER TABLE tbl1 MODIFY 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 数据库 Oracle 模式下变更分区类型(支持将非分区表转换为一级分区表和二级分区表)的语法如下:

ALTER TABLE table_name MODIFY partition_option;

注意

OceanBase 数据库当前版本只支持非分区表转换成分区表。

变更分区示例

示例 1:将非分区表转换成为一级分区表。

obclient> CREATE TABLE tbl1(c1 INT PRIMARY KEY, c2 DATE);
Query OK, 0 rows affected
obclient> ALTER TABLE tbl1 MODIFY PARTITION BY HASH(c1) PARTITIONS 4;
Query OK, 0 rows affected

示例 2:将非分区表转换成为二级分区表(模版化)。

obclient> CREATE TABLE tbl2(c1 INT, c2 DATE, PRIMARY KEY(c1, c2));
Query OK, 0 rows affected
obclient> ALTER TABLE tbl2 MODIFY PARTITION BY HASH(c1)                
                SUBPARTITION BY RANGE (c2)
                SUBPARTITION TEMPLATE(
                SUBPARTITION p1 VALUES LESS THAN (TO_DATE('2016/02/01','YYYY/MM/DD')),
                SUBPARTITION p2 VALUES LESS THAN (TO_DATE('2116/02/01','YYYY/MM/DD'))
                );
Query OK, 0 rows affected

示例 3:将非分区表转换成为二级分区表(非模版化)。

obclient> CREATE TABLE tbl3(c1 INT, c2 DATE, PRIMARY KEY(c1, c2));
Query OK, 0 rows affected
obclient> ALTER TABLE tbl3 MODIFY PARTITION BY RANGE(c1) 
            SUBPARTITION BY RANGE(c2) ( 
                 PARTITION p0 VALUES LESS THAN(0), 
                 PARTITION p1 VALUES LESS THAN(100));
Query OK, 0 rows affected

变更列类型

OceanBase 数据库 Oracle 模式下所支持的列类型的相关转换如下:

  • 字符类型列的数据类型转换,包括  CHAR 和  VARCHAR2
  • 数值数据类型支持改变精度,包括  NUMBER(不允许降低精度)。
  • 字符数据类型支持改变精度,包括  CHAR(不允许降低精度)、 VARCHAR2 、 NVARCHAR2 和  NCHAR

修改列类型的语法如下:

ALTER TABLE table_name MODEFY column_name data_type;

修改列类型的示例

字符数据类型之间的转换示例

示例 1:修改字符数据类型列的数据类型并提升长度。

obclient> CREATE TABLE test01 (c1 INT PRIMARY KEY, c2 CHAR(10), c3 VARCHAR2(32));
Query OK, 0 rows affected
obclient> ALTER TABLE test01 MODIFY c2 VARCHAR(20);
Query OK, 0 rows affected
obclient> ALTER TABLE test01 MODIFY c3 VARCHAR(64);
Query OK, 0 rows affected
obclient> ALTER TABLE test01 MODIFY c3 CHAR(256);
Query OK, 0 rows affected

示例 2:缩短字符数据类型列的长度。

obclient> CREATE TABLE test02(c1 VARCHAR2(128));
Query OK, 0 rows affected
obclient> ALTER TABLE test02 MODIFY c1 VARCHAR2(64);
Query OK, 0 rows affected
obclient> CREATE TABLE test03(c1 CHAR(10));
Query OK, 0 rows affected
obclient> ALTER TABLE test03 MODIFY c1 CHAR(20);
Query OK, 0 rows affected

改变数值数据类型精度的示例

示例 1:修改整数类型列的  NUMBER 数据类型的精度。

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 test04(c1 NUMBER(10,2));
Query OK, 0 rows affected
obclient> ALTER TABLE test04 MODIFY c1 NUMBER(11,3);
Query OK, 0 rows affected


请使用浏览器的分享功能分享到微信等