表创建成功后,您可以使用ALTER TABLE语句对表进行修改。

增加、修改和删除列

OceanBase 数据库支持新增列、修改列及其属性、删除列等。

  • 新增列,支持在表中新增列,但不支持增加主键列。

    • MySQL 模式下的新增列示例

      1. obclient> DESCRIBE test;
      2. +-------+-------------+------+-----+---------+-------+
      3. | Field | Type | Null | Key | Default | Extra |
      4. +-------+-------------+------+-----+---------+-------+
      5. | c1 | int(11) | NO | PRI | NULL | |
      6. | c2 | varchar(50) | YES | | NULL | |
      7. +-------+-------------+------+-----+---------+-------+
      8. 2 rows in set (0.01 sec)
      9. obclient> ALTER TABLE test ADD c3 int;
      10. Query OK, 0 rows affected (0.03 sec)
      11. obclient> DESCRIBE test;
      12. +-------+-------------+------+-----+---------+-------+
      13. | Field | Type | Null | Key | Default | Extra |
      14. +-------+-------------+------+-----+---------+-------+
      15. | c1 | int(11) | NO | PRI | NULL | |
      16. | c2 | varchar(50) | YES | | NULL | |
      17. | c3 | int(11) | YES | | NULL | |
      18. +-------+-------------+------+-----+---------+-------+
      19. 3 rows in set (0.00 sec)
    • Oracle 模式下的新增列示例

      1. obclient> DESCRIBE test;
      2. +-------+--------------+------+-----+---------+-------+
      3. | FIELD | TYPE | NULL | KEY | DEFAULT | EXTRA |
      4. +-------+--------------+------+-----+---------+-------+
      5. | C1 | NUMBER(38) | NO | PRI | NULL | NULL |
      6. | C2 | VARCHAR2(50) | YES | NULL | NULL | NULL |
      7. +-------+--------------+------+-----+---------+-------+
      8. 2 rows in set (0.01 sec)
      9. obclient> ALTER TABLE test ADD c3 int;
      10. Query OK, 0 rows affected (0.03 sec)
      11. obclient> DESCRIBE test;
      12. +-------+--------------+------+-----+---------+-------+
      13. | FIELD | TYPE | NULL | KEY | DEFAULT | EXTRA |
      14. +-------+--------------+------+-----+---------+-------+
      15. | C1 | NUMBER(38) | NO | PRI | NULL | NULL |
      16. | C2 | VARCHAR2(50) | YES | NULL | NULL | NULL |
      17. | C3 | NUMBER(38) | YES | NULL | NULL | NULL |
      18. +-------+--------------+------+-----+---------+-------+
      19. 3 rows in set (0.00 sec)
  • 修改列属性,支持修改列名称和列类型。

    • MySQL 模式下的修改列示例

      1. obclient> DESCRIBE test;
      2. +-------+-------------+------+-----+---------+-------+
      3. | Field | Type | Null | Key | Default | Extra |
      4. +-------+-------------+------+-----+---------+-------+
      5. | c1 | int(11) | NO | PRI | NULL | |
      6. | c2 | varchar(50) | YES | | NULL | |
      7. +-------+-------------+------+-----+---------+-------+
      8. 2 rows in set (0.01 sec)
      9. obclient>ALTER TABLE test CHANGE COLUMN c2 c CHAR(60);
      10. Query OK, 0 rows affected (0.03 sec)
      11. obclient> DESCRIBE test;
      12. +-------+----------+------+-----+---------+-------+
      13. | Field | Type | Null | Key | Default | Extra |
      14. +-------+----------+------+-----+---------+-------+
      15. | c1 | int(11) | NO | PRI | NULL | |
      16. | c | char(60) | YES | | NULL | |
      17. +-------+----------+------+-----+---------+-------+
      18. 2 rows in set (0.00 sec)
    • Oracle 模式下的修改列示例

      1. obclient> DESCRIBE test;
      2. +-------+--------------+------+-----+---------+-------+
      3. | FIELD | TYPE | NULL | KEY | DEFAULT | EXTRA |
      4. +-------+--------------+------+-----+---------+-------+
      5. | C1 | NUMBER(38) | NO | PRI | NULL | NULL |
      6. | C2 | VARCHAR2(50) | YES | NULL | NULL | NULL |
      7. +-------+--------------+------+-----+---------+-------+
      8. 2 rows in set (0.01 sec)
      9. obclient> ALTER TABLE test MODIFY COLUMN c2 CHAR(60);
  • 删除列,支持删除表中的列,但不允许删除主键列或包含索引的列。

    • MySQL 模式下的删除列示例

      1. obclient> DESCRIBE test;
      2. +-------+----------+------+-----+---------+-------+
      3. | Field | Type | Null | Key | Default | Extra |
      4. +-------+----------+------+-----+---------+-------+
      5. | c1 | int(11) | NO | PRI | NULL | |
      6. | c | char(60) | YES | | NULL | |
      7. +-------+----------+------+-----+---------+-------+
      8. 2 rows in set (0.00 sec)
      9. obclient> ALTER TABLE test DROP c;
      10. Query OK, 0 rows affected (0.04 sec)
      11. obclient> DESCRIBE test;
      12. +-------+---------+------+-----+---------+-------+
      13. | Field | Type | Null | Key | Default | Extra |
      14. +-------+---------+------+-----+---------+-------+
      15. | c1 | int(11) | NO | PRI | NULL | |
      16. +-------+---------+------+-----+---------+-------+
      17. 1 row in set (0.01 sec)
    • Oracle 模式下的删除列示例

      1. obclient> DESCRIBE test;
      2. +-------+--------------+------+-----+---------+-------+
      3. | FIELD | TYPE | NULL | KEY | DEFAULT | EXTRA |
      4. +-------+--------------+------+-----+---------+-------+
      5. | C1 | NUMBER(38) | NO | PRI | NULL | NULL |
      6. | C2 | VARCHAR2(50) | YES | NULL | NULL | NULL |
      7. +-------+--------------+------+-----+---------+-------+
      8. 2 rows in set (0.01 sec)
      9. obclient> ALTER TABLE test DROP COLUMN c2;
      10. Query OK, 0 rows affected (0.04 sec)
      11. obclient> DESCRIBE test;
      12. +-------+--------------+------+-----+---------+-------+
      13. | FIELD | TYPE | NULL | KEY | DEFAULT | EXTRA |
      14. +-------+--------------+------+-----+---------+-------+
      15. | C1 | NUMBER(38) | NO | PRI | NULL | NULL |
      16. +-------+--------------+------+-----+---------+-------+
      17. 1 rows in set (0.00 sec)

修改索引

  • MySQL 模式

    OceanBase 数据库的 MySQL 模式支持增加唯一索引和普通索引,同时还支持修改索引的属性。

    • 增加唯一索引

      OceanBase 数据库支持在创建表后为表增加唯一索引。如果创建表时同时设置了主键,OceanBase 数据库会默认为主键列创建一个唯一索引。

      增加唯一索引的示例如下:

      1. obclient> CREATE TABLE test (c1 int PRIMARY KEY, c2 VARCHAR(50));
      2. Query OK, 0 rows affected (0.04 sec)
      3. obclient> ALTER TABLE test ADD UNIQUE INDEX index_name(c2);
      4. Query OK, 0 rows affected (0.53 sec)
    • 增加普通索引

      OceanBase 数据库的 MySQL 模式支持一次增加多个索引,索引关键字用INDEXKEY均可以。

      1. obclient> CREATE TABLE test (c1 int PRIMARY KEY, c2 VARCHAR(50));
      2. Query OK, 0 rows affected (0.04 sec)
      3. obclient> ALTER TABLE test ADD INDEX myidx(c1,c2);
      4. Query OK, 0 rows affected (0.55 sec)
    • 修改索引属性

      OceanBase 数据库的 MySQL 模式支持将索引修改为可见或不可见,默认索引均可见,您可以将索引修改为不可见。

      语法如下:

      1. obclient> ALTER TABLE test ALTER INDEX myidx INVISIBLE;
  • Oracle 模式

    OceanBase 数据库的 Oracle 模式支持为非分区表增加唯一索引。

    示例如下:

    • 增加唯一索引

      1. obclient> CREATE TABLE test (c1 int PRIMARY KEY, c2 VARCHAR(50));
      2. Query OK, 0 rows affected (0.04 sec)
      3. obclient> ALTER TABLE test ADD UNIQUE(c2);

重命名表

表创建成功后,您可以更改表名。

OceanBase 数据库的 MySQL 模式和 Oracle 模式均支持重命名表。

示例如下:

  1. obclient> ALTER TABLE test RENAME TO t1;

删除表组

OceanBase 数据库的 MySQL 模式支持删除表所属的表组。

MySQL 模式下删除表组的示例如下:

  1. obclient> ALTER TABLE test DROP TABLEGROUP grp1;

更多表组相关信息,请参见 管理表组 章节。

删除外键

OceanBase 数据库的 MySQL 模式和 Oracle 模式均支持删除表的外键。

  • MySQL 模式下删除表的外键示例

    1. obclient> ALTER TABLE test DROP FOREIGN KEY fk_name;
  • Oracle 模式下删除表的外键示例

    1. obclient> ALTER TABLE test DROP CONSTRAINT fk_name;