暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

OceanBase学习记录13|体验 DDL 新特性(Oracle 模式)

原创 没有名字 2023-01-16
909

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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论