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「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




