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
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70026075/viewspace-2932345/ ,如需转载,请注明出处,否则将追究法律责任。