SQL建表核心是CREATE TABLE语句,需指定表名、字段名、数据类型及约束;基本结构为CREATE TABLE 表名(字段名 类型 [约束],...); 常用类型有INT、VARCHAR(n)、DATE、DECIMAL(p,s),典型约束包括PRIMARY KEY、NOT NULL、UNIQUE、CHECK。

创建SQL数据表,核心是用 CREATE TABLE 语句定义表名、字段名、数据类型及约束条件。写对语法、选对类型、设好主键和非空,表就建得稳。
基础建表语句结构
最简形式包含表名、字段列表和类型声明:
- CREATE TABLE 表名 (字段名 数据类型 [约束], ...);
- 字段之间用逗号分隔,整条语句以分号结尾(部分数据库如MySQL可省略)
- 常见数据类型:INT(整数)、VARCHAR(长度)(变长字符串)、DATE(日期)、DECIMAL(精度,小数位)(精确小数)
带常用约束的完整示例
实际建表通常要加主键、非空、唯一等约束,提升数据质量:
CREATE TABLE students ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50) NOT NULL, email VARCHAR(100) UNIQUE, age INT CHECK (age >= 0 AND age <= 150), created_at DATETIME DEFAULT CURRENT_TIMESTAMP );
- PRIMARY KEY:标识唯一行,自动加索引;AUTO_INCREMENT(MySQL)或 SERIAL(PostgreSQL)实现自增
- NOT NULL:该字段不允许存NULL值
- UNIQUE:值不能重复(允许一个NULL)
- CHECK:限制字段取值范围(注意:MySQL 5.7及以前版本会忽略CHECK,8.0+才真正生效)
- DEFAULT:插入时未提供值则自动填默认值,如 CURRENT_TIMESTAMP 填当前时间
外键关联与跨表设计
需要关联其他表时,用 FOREIGN KEY 约束保证数据一致性:
CREATE TABLE orders ( order_id INT PRIMARY KEY AUTO_INCREMENT, student_id INT NOT NULL, amount DECIMAL(10,2) NOT NULL, order_date DATE DEFAULT (CURRENT_DATE), FOREIGN KEY (student_id) REFERENCES students(id) ON DELETE CASCADE );
- REFERENCES 表名(字段名) 指明参照关系,要求被引用字段是主键或有唯一索引
- ON DELETE CASCADE 表示删除students中某学生时,其所有订单也自动删除(也可选 SET NULL、RESTRICT 等)
- 注意:InnoDB引擎支持外键,MyISAM不支持;建外键前确保两个字段类型严格一致(如都是INT UNSIGNED)
兼容不同数据库的小提醒
基本语法通用,但细节有差异:
- 自增主键:MySQL用 AUTO_INCREMENT,PostgreSQL用 SERIAL 或 GENERATED ALWAYS AS IDENTITY,SQL Server用 IDENTITY(1,1)
- 默认时间:MySQL支持 CURRENT_TIMESTAMP,PostgreSQL推荐 NOW() 或 CURRENT_TIMESTAMP
- 字符串长度:VARCHAR必须指定最大长度(如VARCHAR(255)),TEXT类型适合大文本,不参与索引长度限制
- 建表前可加 IF NOT EXISTS 避免重复报错(MySQL/PostgreSQL支持,SQL Server用IF NOT EXISTS + SELECT判断)
基本上就这些。建表不是一次写完就完事,关键是想清楚业务字段、哪些必填、哪些要唯一、怎么连其他表——语法只是把逻辑准确表达出来的工具。










