OceanBase新建表怎么操作?有哪些最佳实践?

文章导读
在OceanBase中新建表主要通过执行CREATE TABLE SQL语句完成。操作前需确保已部署集群、创建MySQL模式租户及数据库,并具备CREATE权限。建表时需定义表名、列名、数据类型及约束条件。最佳实践包括:建议为表设计主键或唯一键以提升性能与维护性;若无合适主键,系统会自动生成隐藏自增列;合理选择存储格式(行存、列存或混存);规范命名(避免无意义名称、统一大写或遵循规范)、指定字符集
📋 目录
  1. 创建表-V4.3.5-OceanBase 数据库文档-分布式数据库使用文档
  2. 创建表-V4.4.1-OceanBase 数据库文档-分布式数据库使用文档
  3. 【OceanBase运维系列】OB建表方式汇总
  4. FAQ
A A

在OceanBase中新建表主要通过执行CREATE TABLE SQL语句完成。操作前需确保已部署集群、创建MySQL模式租户及数据库,并具备CREATE权限。建表时需定义表名、列名、数据类型及约束条件。最佳实践包括:建议为表设计主键或唯一键以提升性能与维护性;若无合适主键,系统会自动生成隐藏自增列;合理选择存储格式(行存、列存或混存);规范命名(避免无意义名称、统一大写或遵循规范)、指定字符集(如utf8mb4),并根据业务场景合理设计分区与索引,以保障数据完整性、查询性能及系统可扩展性。

创建表-V4.3.5-OceanBase 数据库文档-分布式数据库使用文档

创建非分区表 创建非分区表是指创建只有一个分区的表。 创建非分区表的示例语句如下: obclient>CREATETABLEtable_name1(w_idint,w_ytddecimal(12,2),w_taxdecimal(4,4),w_namevarchar(10),w_street_1varchar(20),w_street_2varchar(20),w_cityvarchar(20),w_statechar(2),w_zipchar(9),unique(w_name,w_city),primarykey(w_id));Query OK,0rowsaffected(0.09sec)obclient>CREATETABLEtable_name2(c_w_idintNOTNULL,c_d_idintNOTnull,c_idintNOTnull,c_discountdecimal(4,4),c_creditchar(2),c_lastvarchar(16),c_firstvarchar(16),c_middlechar(2),c_balancedecimal(12,2),c_ytd_paymentdecimal(12,2),c_payment_cntint,c_credit_limdecimal(12,2),c_street_1varchar(20),c_street_2varchar(20),c_cityvarchar(20),c_statechar(2),c_zipchar(9),c_phonechar(16),c_sincedate,c_delivery_cntint,c_datavarchar(500),indexicust(c_last,c_d_id,c_w_id,c_first,c_id),FOREIGNKEY(c_w_id)REFERENCEStable_name1(w_id),primarykey(c_w_id,c_d_id,c_id));Query OK,0rowsaffected 示例中创建了 2 个表,并同时对表中的列定义了一些约束信息,包括在不同列上创建的主键和外键等。更多主键、外键等的介绍,请参见定义列的约束类型。 创建表的列时请选择正确的数据类型,有关 SQL 数据类型的详细描述,请参见数据类型。 说明 基于性能和后期维护的需要,建议建表时为表设计主键或者唯一键。如果没有合适的字段作为主键,可以在创建表时不指定主键,待表创建成功后系统会为无主键表指定自增列作为隐藏主键。有关自增列的介绍请参见定义自增列。 创建复制表 复制表是 OceanBase 数据库的一种特殊表。这种表可以在任意一个“健康”的副本上读取到数据的最新修改。对于写入频率要求较低、读操作延迟和负载均衡要求较高的用户来说,复制表是一种很好的选择。 当用户创建一个复制表后,所在租户的所有 OBServer 节点内都会创建一个复制表的副本,这些副本中有一个副本会被选为 Leader,接受写请求,其余的副本只能接受读请求。 所有的副本都需要向 Leader 汇报状态,主要是副本的回放进度,即数据同步的进度。

创建表-V4.4.1-OceanBase 数据库文档-分布式数据库使用文档

前提条件 在创建表前,您需要确认以下事项: 您已部署 OceanBase 集群并且创建了 MySQL 模式租户。更多有关部署 OceanBase 集群的信息,请参见部署概述。 您已连接到 OceanBase 数据库的 MySQL 租户。更多连接数据库的信息,请参见连接方式概述。 您已创建数据库。更多有关创建数据库的信息,请参见创建数据库。 您已拥有CREATE权限。查看当前用户权限的相关操作请参见查看用户权限。如果不具备该权限,请联系管理员为您授权,用户授权的相关操作请参见直接授予权限。 使用命令行创建表 请使用CREATE TABLE语句创建表。 说明 您可以使用SHOW TABLES;语句查看数据库中表的信息。 定义表名 创建表时,需要先为表命名,以下是定义表名时需要遵循的要求: 在OceanBase 数据库的 MySQL 模式中,每个表的名称必须保证在数据库内唯一。 表名称不能超过 64 个字符。 建议给表起一个有意义的名字,不要使用t1、table1这样的表名。更多表命名规范信息,请参见表命名规范。 示例1:创建一个有关订单信息的表。 注意 因为未添加列信息,所以下方这条 SQL 暂时还不能被运行。 CREATETABLEorders(); 定义列 ​在数据库中,列(Column)用于记录一张表上某个属性的字段的值,用户给每个属性起的名称即为列名。除了列名以外,列上还有数据类型以及数据类型的最大长度(精度)等信息。 以下是定义表的列时需要遵循的要求: 根据数据类型的特点,为待存储在列中的数据选择合适的数据类型。 OceanBase 数据库 MySQL 模式中支持的数据类型及详细介绍请参见数据类型概述。 对于字符串数据,建议使用变长字符串数据类型,并指定最大长度。请确保指定的最大长度大于需要存储的最大字符数,避免超出最大长度时出现字符截断现象。 根据主键列的要求,确认是否需要为表定义主键列。 根据其他约束的要求,确认是否需要向列中添加其他约束。 当列上有NOT NULL约束时,通常建议为该列设置默认值。当列类型为日期或时间类型时,可以设置默认值为数据库的当前时间。

OceanBase新建表怎么操作?有哪些最佳实践?

【OceanBase运维系列】OB建表方式汇总

根据大多数常用数据库产品导出DDL SQL都不带模式名的情况,DDL SQL中统一规定不带模式名,且执行DDL SQL语句一律使用建表脚本(bin/create_table.sh)。 根据《开放OceanBase数据库开发规范v1.0(正式版).docx》的字符集规范要求:统一添加“DEFAULT charset=utf8mb4 COLLATE=utf8mb4_bin”,即对所有字段的内容(数据)大小写敏感。 根据《开放OceanBase数据库开发规范v1.0(正式版).docx》的业务表规范要求:创建表名和列名时统一使用大写,禁止大小写混用,禁止反闭包表名和列名。 SQL文件命名格式“${表名:小写}-schema.sql”,路径:/ETL/data/${SCHEMA:小写}/TABLE/,内容以一个空行结束,SQL中删除无效空行,段落之前以单个空行作为分隔符。

FAQ

OceanBase创建表时是否必须指定主键?

并非强制要求,但基于性能和后期维护的需要,强烈建议建表时设计主键或唯一键。如果未指定主键,表创建成功后系统会自动为该无主键表指定一个自增列作为隐藏主键。

OceanBase新建表怎么操作?有哪些最佳实践?

在OceanBase中如何设置表的默认存储格式?

可以通过租户级参数进行配置。使用ALTER SYSTEM SET default_table_store_format="column";可设置为列存模式,设置为compound则为行列混存模式,也可通过SHOW PARAMETERS LIKE '%store_format%';查看当前配置。

OceanBase新建表怎么操作?有哪些最佳实践?

建表时对表名和列名有哪些命名规范要求?

根据开发规范,表名和列名应统一使用大写,禁止大小写混用及反闭包命名。表名称在数据库内需唯一且不超过64个字符,建议赋予有意义的名称,避免使用t1等无意义命名。