CREATE TABLE 表名 (列名1 数据类型, 列名2 数据类型, ...);
创建表的核心语法(SQL标准)
SQL标准语法如下:
CREATE TABLE 表名 ( 列名1 数据类型 [约束条件], 列名2 数据类型 [约束条件], ... [表级约束] );
关键组成部分
-
表名
- 需唯一且具有描述性(如
users
、orders
)。 - 避免使用保留字(如
select
、where
)。
- 需唯一且具有描述性(如
-
列定义
- 列名:每列的唯一标识(如
id
、name
)。 - 数据类型:指定列存储的数据类型,
- 整数:
INT
- 字符串:
VARCHAR(长度)
- 日期/时间:
DATE
、DATETIME
- 浮点数:
DECIMAL(总位数, 小数位)
- 整数:
- 约束条件(可选):
PRIMARY KEY
:主键(唯一标识行)NOT NULL
:禁止空值UNIQUE
:值必须唯一DEFAULT 值
:设置默认值FOREIGN KEY
:外键关联其他表
- 列名:每列的唯一标识(如
-
表级约束
- 定义跨多列的约束,例如复合主键:
PRIMARY KEY (列1, 列2)
- 定义跨多列的约束,例如复合主键:
主流数据库的创建表示例
MySQL/MariaDB
CREATE TABLE employees ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50) NOT NULL, birth_date DATE, salary DECIMAL(10, 2) DEFAULT 0.00, department_id INT, FOREIGN KEY (department_id) REFERENCES departments(id) );
特点:
AUTO_INCREMENT
自动生成唯一ID(类似其他数据库的SERIAL
或IDENTITY
)。
PostgreSQL
CREATE TABLE employees ( id SERIAL PRIMARY KEY, name VARCHAR(50) NOT NULL, birth_date DATE, salary NUMERIC(10, 2) DEFAULT 0.00, department_id INT REFERENCES departments(id) );
特点:
- 使用
SERIAL
自增整型,NUMERIC
精确存储小数。
SQL Server
CREATE TABLE employees ( id INT IDENTITY(1,1) PRIMARY KEY, name NVARCHAR(50) NOT NULL, birth_date DATE, salary DECIMAL(10, 2) DEFAULT 0.00, department_id INT, FOREIGN KEY (department_id) REFERENCES departments(id) );
特点:
IDENTITY(1,1)
实现自增,NVARCHAR
支持Unicode字符串。
Oracle
CREATE TABLE employees ( id NUMBER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, name VARCHAR2(50) NOT NULL, birth_date DATE, salary NUMBER(10, 2) DEFAULT 0.00, department_id NUMBER, CONSTRAINT fk_dept FOREIGN KEY (department_id) REFERENCES departments(id) );
特点:
NUMBER
类型替代整数/小数,外键需显式命名(如fk_dept
)。
最佳实践与注意事项
-
命名规范
- 使用小写字母和下划线(如
product_category
),避免特殊字符。
- 使用小写字母和下划线(如
-
数据类型选择
- 精确匹配需求:例如存储价格用
DECIMAL
,大文本用TEXT
。
- 精确匹配需求:例如存储价格用
-
约束优化
- 主键必备:确保每行有唯一标识。
- 外键关联:维护数据完整性,但可能影响性能。
-
避免常见错误
- 未设置主键 → 导致数据冗余或查询低效。
- 字段长度过小 → 引发数据截断(如
VARCHAR(10)
存储长文本)。
-
跨平台兼容性
- 自增列语法差异大(MySQL用
AUTO_INCREMENT
,PostgreSQL用SERIAL
)。 - 字符串类型:Oracle用
VARCHAR2
,其他用VARCHAR
。
- 自增列语法差异大(MySQL用
验证表是否创建成功
执行查询命令检查表结构:
-- 通用方法 DESCRIBE employees; -- MySQL SELECT * FROM information_schema.columns WHERE table_name = 'employees'; -- PostgreSQL/SQL Server
创建表的命令遵循SQL标准,但需根据具体数据库调整细节:
- 核心:定义列名、数据类型、约束(主键、非空等)。
- 差异点:自增列、字符串类型、外键语法。
- 关键原则:明确业务需求,选择合适的数据类型和约束,确保数据完整性与性能平衡。
实际操作前,请查阅所用数据库的官方文档以适配语法。
引用说明基于SQL:2016标准及主流数据库官方文档(MySQL 8.0、PostgreSQL 15、SQL Server 2022、Oracle 21c),确保语法准确性和权威性。
原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/29234.html