在数据库管理系统中,表是存储数据的基本结构,合理创建表是确保数据高效存储和访问的前提,达梦数据库(DM Database)作为国产自主可控的数据库管理系统,其建表语法与主流数据库类似,但也具备自身特性,本文将详细介绍达梦数据库建表的核心语法、数据类型、约束条件及最佳实践,帮助用户快速掌握建表技能。

建表基本语法
达梦数据库建表通过CREATE TABLE语句实现,基本语法结构如下:
CREATE TABLE [模式名.]表名 (
列名1 数据类型 [列级约束],
列名2 数据类型 [列级约束],
...
[表级约束]
) [表属性选项]; - 模式名:可选,用于指定表所属的模式(类似其他数据库的schema),若未指定则默认为当前用户模式。
- 列名:列的名称,需符合标识符命名规范(以字母或下划线开头,后续可包含字母、数字或下划线)。
- 数据类型:定义列存储的数据类型,如数值型、字符型、日期型等。
- 约束:包括列级约束(如
NOT NULL、DEFAULT)和表级约束(如PRIMARY KEY、FOREIGN KEY),用于保证数据完整性。 - 表属性选项:如存储位置、表空间、压缩属性等,用于优化存储性能。
数据类型详解
达梦数据库支持丰富的数据类型,常用类型如下表所示:
| 类型分类 | 常用数据类型 | 说明 |
|---|---|---|
| 数值型 | INT、BIGINT、SMALLINT、FLOAT、DECIMAL | INT表示整数,DECIMAL(p,s)表示精确小数(p为总位数,s为小数位数) |
| 字符型 | CHAR(n)、VARCHAR(n)、TEXT | CHAR固定长度,VARCHAR可变长度,TEXT用于大文本存储 |
| 日期时间型 | DATE、TIME、DATETIME、TIMESTAMP | DATE存储日期,TIMESTAMP存储日期和时间,支持精度到纳秒 |
| 二进制型 | BINARY(n)、VARBINARY(n)、BLOB | BINARY固定长度二进制,BLOB用于存储大二进制数据 |
| 其他类型 | BOOLEAN(布尔型)、JSON(JSON文档) | BOOLEAN存储TRUE/FALSE,JSON存储半结构化数据 |
约束条件应用
约束是保证数据完整性的关键,达梦数据库支持的约束类型及用法如下:

列级约束
直接在列定义后添加,适用于单列约束:
NOT NULL:列值不能为空,user_name VARCHAR(50) NOT NULL。DEFAULT:设置默认值,status INT DEFAULT 1(默认值为1)。UNIQUE:列值唯一,允许空值,email VARCHAR(100) UNIQUE。PRIMARY KEY:主键,唯一标识表记录,id INT PRIMARY KEY。CHECK:检查约束,限制列值范围,age INT CHECK (age >= 18)。
表级约束
在所有列定义后添加,适用于多列约束:
PRIMARY KEY (列1, 列2):联合主键,PRIMARY KEY (dept_id, user_id)。FOREIGN KEY (列名) REFERENCES 父表(列名):外键,实现表间关联,FOREIGN KEY (dept_id) REFERENCES department(dept_id)。UNIQUE (列1, 列2):联合唯一约束,UNIQUE (username, create_time)。
建表示例
示例1:创建用户表(单表)
CREATE TABLE user_info (
user_id INT PRIMARY KEY AUTO_INCREMENT, -- 自增主键
username VARCHAR(50) NOT NULL UNIQUE, -- 用户名唯一且非空
password VARCHAR(100) NOT NULL, -- 密码非空
email VARCHAR(100) DEFAULT '', -- 默认空字符串
age INT CHECK (age BETWEEN 0 AND 120), -- 年龄范围0-120
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, -- 默认当前时间
status INT DEFAULT 1 -- 状态:1-正常,0-禁用
); 示例2:创建订单表(含外键)
CREATE TABLE order_info (
order_id BIGINT PRIMARY KEY,
user_id INT NOT NULL,
order_no VARCHAR(50) NOT NULL UNIQUE,
total_amount DECIMAL(10,2) NOT NULL,
create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES user_info(user_id) -- 外键关联用户表
); 表属性优化
通过表属性选项可优化存储和性能,常用选项包括:

TABLESPACE:指定表空间,TABLESPACE USER_DATA。STORAGE:存储参数,如STORAGE (INITIAL 1M NEXT 512K),定义初始大小和扩展步长。COMPRESSION:启用压缩,COMPRESSION 'ZSTD'(需数据库版本支持)。PARTITION BY:分区表,提升大数据量查询性能,PARTITION BY RANGE (create_time)。
建表最佳实践
- 命名规范:表名和列名使用小写字母,单词间用下划线分隔,避免保留字。
- 主键设计:每个表建议设置主键,推荐使用自增整数或UUID,避免业务字段作为主键。
- 索引优化:对查询频繁的字段(如外键、条件字段)创建索引,但避免过度索引。
- 数据类型选择:优先使用精确的数据类型(如用
INT而非VARCHAR存储数字),减少存储空间占用。 - 约束合理使用:通过
NOT NULL、CHECK等约束减少无效数据,外键需谨慎使用,避免影响写入性能。
相关问答FAQs
Q1:达梦数据库中如何修改已创建表的结构?
A:使用ALTER TABLE语句修改表结构,常见操作包括添加列、修改列类型、删除列等。
- 添加列:
ALTER TABLE user_info ADD COLUMN phone VARCHAR(20); - 修改列类型:
ALTER TABLE user_info MODIFY COLUMN age INT; - 删除列:
ALTER TABLE user_info DROP COLUMN phone;
Q2:达梦数据库支持哪些自增主键方式?如何设置?
A:达梦数据库支持两种自增主键方式:
- 序列(SEQUENCE)+ 触发器:先创建序列,再通过触发器在插入数据时自动填充。
CREATE SEQUENCE seq_user_id INCREMENT BY 1 START WITH 1; CREATE TRIGGER trig_user_id BEFORE INSERT ON user_info FOR EACH ROW BEGIN IF :NEW.user_id IS NULL THEN :NEW.user_id := seq_user_id.NEXTVAL; END IF; END; - 自增列(AUTO_INCREMENT):直接在列定义后添加
AUTO_INCREMENT属性(推荐,语法简单)。CREATE TABLE user_info ( user_id INT PRIMARY KEY AUTO_INCREMENT, ... );
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复