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

数据库对象管理MySQL模式更改表

2023-03-28
258

表创建成功后,您可以使用 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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论