oceanbase新建表create语句
时间: 2025-04-22 19:04:15 浏览: 33
<think>好的,用户想了解OceanBase中新建表的CREATE语句。首先,我需要回忆OceanBase的语法是否与MySQL或Oracle兼容,因为OceanBase通常支持这两种模式。用户可能之前有使用其他数据库的经验,所以需要明确说明OceanBase的特点。
接下来,我应该先给出一个基本的CREATE TABLE示例,这是最直接的帮助。然后,可能需要解释常用的选项,比如存储引擎、字符集,主键、索引的设置,以及分区的用法,因为分布式数据库中分区很重要。
用户可能还需要了解如何添加注释和设置自增列,这些都是实际应用中常见的需求。此外,需要注意语法中的细节,比如反引号的使用,是否必需,或者只是约定俗成。同时,需要提醒用户根据实际需求调整字段类型和选项,避免给出不全面的建议。
另外,考虑用户的使用场景,可能是开发环境或者生产环境,是否需要分布式表的特殊配置?但作为基础介绍,可能先覆盖单机表的创建,再提到分区和分布式扩展。最后,检查是否有遗漏的部分,比如外键约束、索引类型等,但为了不过于复杂,先保持回答简洁,必要时再深入。</think>OceanBase 的建表语句遵循标准 SQL 语法,与 MySQL/Oracle 模式兼容。以下是新建表的基本语法及示例说明:
### 基础语法
```sql
CREATE TABLE [IF NOT EXISTS] 表名 (
列名1 数据类型 [列约束] [COMMENT '注释'],
列名2 数据类型 [列约束] [COMMENT '注释'],
...
[表约束]
) [表选项];
```
### 完整示例
```sql
CREATE TABLE IF NOT EXISTS `employee` (
`id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '员工ID',
`name` VARCHAR(50) NOT NULL COMMENT '姓名',
`age` INT(3) DEFAULT 0 COMMENT '年龄',
`salary` DECIMAL(10,2) COMMENT '薪资',
`department` VARCHAR(50) COMMENT '部门',
`hire_date` DATE NOT NULL COMMENT '入职日期',
PRIMARY KEY (`id`),
INDEX `idx_department` (`department`),
INDEX `idx_name` (`name`)
) ENGINE=OCEANBASE
DEFAULT CHARSET=utf8mb4
COMMENT='员工信息表'
PARTITION BY HASH(`id`) PARTITIONS 4;
```
### 关键要素说明
1. **列定义**
- `NOT NULL`: 非空约束
- `DEFAULT`: 默认值
- `AUTO_INCREMENT`: 自增列(需与主键配合使用)
- `COMMENT`: 列注释
2. **表约束**
- `PRIMARY KEY`: 主键约束(OceanBase 要求必须有主键)
- `INDEX`: 创建索引(支持普通索引、唯一索引等)
3. **表选项**
- `ENGINE=OCEANBASE`: 指定存储引擎
- `DEFAULT CHARSET`: 字符集设置
- `COMMENT`: 表注释
- `PARTITION BY`: 分区设置(分布式场景重要配置)
### 特殊说明
1. **主键要求**:OceanBase 强制要求每个表必须有主键
2. **分区策略**:支持 HASH/RANGE/LIST 等分区方式,分布式部署必须设置分区
3. **索引特性**:支持全局索引和本地索引
4. **数据类型**:支持数值、字符、时间、大对象等标准类型
### 扩展用法
#### 创建分区表
```sql
CREATE TABLE sales (
order_id BIGINT PRIMARY KEY,
order_date DATE NOT NULL,
amount DECIMAL(10,2)
) PARTITION BY RANGE(order_date) (
PARTITION p202201 VALUES LESS THAN ('2022-02-01'),
PARTITION p202202 VALUES LESS THAN ('2022-03-01'),
PARTITION p_max VALUES LESS THAN MAXVALUE
);
```
#### 创建带全局索引表
```sql
CREATE TABLE users (
user_id BIGINT PRIMARY KEY,
email VARCHAR(255) UNIQUE,
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) PARTITION BY HASH(user_id) PARTITIONS 8;
CREATE INDEX gidx_email ON users(email) GLOBAL;
```
建议根据实际业务需求设计表结构,特别注意分区策略选择和主键设计,这对分布式数据库性能有重要影响。
阅读全文
相关推荐








