OceanBase學習之路11|體驗 DDL 新特性(Oracle 模式)

老樹樁12發表於2023-01-16

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部落格 ” ,連結:http://blog.itpub.net/70026075/viewspace-2932345/,如需轉載,請註明出處,否則將追究法律責任。

相關文章