表创建成功后,您可以使用 ALTER TABLE 语句对表进行修改。
注意事项
在执行更改表的主键或列类型的操作时,禁止执行其他的 DDL 操作。同时,在执行其他的 DDL 操作时,禁止执行更改表的主键或列类型的操作。
增加、修改和删除列
OceanBase 数据库支持新增列、修改列及其属性、删除列等。
新增列,支持在表中新增列,但不支持直接增加主键列。如果需要增加主键列,建议先增加列后再为列添加主键。添加主键的相关操作请参见 定义列的约束类型。
新增普通列的示例如下:
obclient> DESCRIBE test; +-------+--------------+------+-----+---------+-------+ | FIELD | TYPE | NULL | KEY | DEFAULT | EXTRA | +-------+--------------+------+-----+---------+-------+ | C1 | NUMBER(38) | NO | PRI | NULL | NULL | | C2 | VARCHAR2(50) | YES | NULL | NULL | NULL | +-------+--------------+------+-----+---------+-------+ 2 rows in set obclient> ALTER TABLE test ADD c3 int; Query OK, 0 rows affected obclient> DESCRIBE test; +-------+--------------+------+-----+---------+-------+ | FIELD | TYPE | NULL | KEY | DEFAULT | EXTRA | +-------+--------------+------+-----+---------+-------+ | C1 | NUMBER(38) | NO | PRI | NULL | NULL | | C2 | VARCHAR2(50) | YES | NULL | NULL | NULL | | C3 | NUMBER(38) | YES | NULL | NULL | NULL | +-------+--------------+------+-----+---------+-------+ 3 rows in set修改列类型。OceanBase 数据库支持多种列类型之间的转换。
OceanBase 数据库中列类型的转换规则及详细信息请参见 列类型变更规则。
修改列类型的 SQL 语法如下:
ALTER TABLE table_name MODIFY (column_name data_type);示例如下:
obclient> DESCRIBE test; +-------+--------------+------+-----+---------+-------+ | FIELD | TYPE | NULL | KEY | DEFAULT | EXTRA | +-------+--------------+------+-----+---------+-------+ | C1 | NUMBER(38) | NO | PRI | NULL | NULL | | C2 | VARCHAR2(50) | YES | NULL | NULL | NULL | +-------+--------------+------+-----+---------+-------+ 2 rows in set obclient> ALTER TABLE test MODIFY (c2 VARCHAR(70)); Query OK, 0 rows affected obclient> DESCRIBE test; +-------+--------------+------+-----+---------+-------+ | FIELD | TYPE | NULL | KEY | DEFAULT | EXTRA | +-------+--------------+------+-----+---------+-------+ | C1 | NUMBER(38) | YES | NULL | NULL | NULL | | C2 | VARCHAR2(70) | YES | NULL | NULL | NULL | +-------+--------------+------+-----+---------+-------+ 2 rows in set修改列名。示例如下:
obclient> ALTER TABLE test RENAME COLUMN c1 TO c; Query OK, 0 rows affected obclient> DESCRIBE test; +-------+--------------+------+-----+---------+-------+ | FIELD | TYPE | NULL | KEY | DEFAULT | EXTRA | +-------+--------------+------+-----+---------+-------+ | C | NUMBER(38) | YES | NULL | NULL | NULL | | C2 | VARCHAR2(70) | YES | NULL | NULL | NULL | +-------+--------------+------+-----+---------+-------+ 2 rows in set修改列的默认值。示例如下:
obclient> ALTER TABLE test MODIFY c DEFAULT 1; Query OK, 0 rows affected obclient> DESCRIBE test; +-------+--------------+------+-----+---------+-------+ | FIELD | TYPE | NULL | KEY | DEFAULT | EXTRA | +-------+--------------+------+-----+---------+-------+ | C | NUMBER(38) | YES | NULL | 1 | NULL | | C2 | VARCHAR2(70) | YES | NULL | NULL | NULL | +-------+--------------+------+-----+---------+-------+ 2 rows in set修改列的非空约束。示例如下:
obclient> DESCRIBE test; +-------+--------------+------+-----+---------+-------+ | FIELD | TYPE | NULL | KEY | DEFAULT | EXTRA | +-------+--------------+------+-----+---------+-------+ | C | NUMBER(38) | YES | NULL | 1 | NULL | | C2 | VARCHAR2(70) | YES | NULL | NULL | NULL | +-------+--------------+------+-----+---------+-------+ 2 rows in set obclient> ALTER TABLE test MODIFY (c2 NOT NULL); Query OK, 0 rows affected obclient> DESCRIBE test; +-------+--------------+------+-----+---------+-------+ | FIELD | TYPE | NULL | KEY | DEFAULT | EXTRA | +-------+--------------+------+-----+---------+-------+ | C | NUMBER(38) | YES | NULL | 1 | NULL | | C2 | VARCHAR2(70) | NO | NULL | NULL | NULL | +-------+--------------+------+-----+---------+-------+ 2 rows in set删除列,支持删除表中的列,但不允许删除主键列或包含索引的列。示例如下:
obclient> DESCRIBE test; +-------+--------------+------+-----+---------+-------+ | FIELD | TYPE | NULL | KEY | DEFAULT | EXTRA | +-------+--------------+------+-----+---------+-------+ | C1 | NUMBER(38) | NO | PRI | NULL | NULL | | C2 | VARCHAR2(50) | YES | NULL | NULL | NULL | +-------+--------------+------+-----+---------+-------+ 2 rows in set obclient> ALTER TABLE test DROP COLUMN c2; Query OK, 0 rows affected obclient> DESCRIBE test; +-------+--------------+------+-----+---------+-------+ | FIELD | TYPE | NULL | KEY | DEFAULT | EXTRA | +-------+--------------+------+-----+---------+-------+ | C1 | NUMBER(38) | NO | PRI | NULL | NULL | +-------+--------------+------+-----+---------+-------+ 1 rows in set
修改索引
OceanBase 数据库支持为已存在的表增加唯一索引。示例如下:
obclient> CREATE TABLE test (c1 int PRIMARY KEY, c2 VARCHAR(50));
Query OK, 0 rows affected
obclient> ALTER TABLE test ADD UNIQUE(c2);
重命名表
表创建成功后,您可以更改表名。
OceanBase 数据库支持重命名表。示例如下:
obclient> ALTER TABLE test RENAME TO t1;
或
obclient> RENAME TABLE test TO t1;
更改表的主键和外键
创建表后,OceanBase 数据库支持添加或删除表的主键和外键,更改表的主键和外键的具体操作及说明请参见 定义列的约束类型。
更改表的副本数
创建表后,还支持更改表的副本数。
设置表的副本数为 2 的示例如下:
obclient> ALTER TABLE test SET REPLICA_NUM=2;
Query OK, 0 rows affected「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




