当前位置:首页 > 数据库 > 正文

数据库建表SQL怎么写?

使用CREATE TABLE语句定义表结构,需指定表名、列名、数据类型及约束(如主键、非空),CREATE TABLE 表名 (列1 数据类型, 列2 数据类型, …);(支持MySQL/SQL Server等)

在数据库中创建表是数据管理的核心操作,通过结构化查询语言(SQL)实现,以下为详细指南,涵盖语法、示例及最佳实践,适用于主流数据库系统(MySQL、SQL Server、PostgreSQL等)。

数据库建表SQL怎么写?  第1张


创建表的基本语法

CREATE TABLE 表名 (
    列名1 数据类型 [约束条件],
    列名2 数据类型 [约束条件],
    ...
    [表级约束]
);
  • 表名:自定义名称(建议英文+下划线,如 user_info
  • 列名:字段名称(如 id, name
  • 数据类型:定义字段存储格式(如整数、文本)
  • 约束:限制数据的规则(如主键、非空)

关键数据类型详解

数据类型 说明 适用场景
INT 整数 ID、年龄等数值
VARCHAR(n) 可变长度字符串 用户名、地址(n=最大长度)
DATE 日期(YYYY-MM-DD) 生日、注册日期
DECIMAL(p,s) 精确小数(p=总位数,s=小数位) 价格、金额
BOOLEAN 布尔值(true/false) 状态标记

注意:不同数据库类型名可能不同(如Oracle用 NUMBER,SQLite用 TEXT)。


核心约束条件

  1. 主键约束(唯一标识)
    id INT PRIMARY KEY, -- 单列主键
  2. 非空约束(强制字段必填)
    name VARCHAR(50) NOT NULL,
  3. 唯一约束(禁止重复值)
    email VARCHAR(100) UNIQUE,
  4. 外键约束(关联其他表)
    user_id INT,
    FOREIGN KEY (user_id) REFERENCES users(id)
  5. 默认值(自动填充)
    created_at DATE DEFAULT CURRENT_DATE -- 自动设为当前日期

实战创建表示例

场景:创建用户信息表(user_info

CREATE TABLE user_info (
    user_id INT PRIMARY KEY AUTO_INCREMENT,  -- 自增主键
    username VARCHAR(30) NOT NULL UNIQUE,    -- 非空且唯一
    password CHAR(64) NOT NULL,              -- 加密密码(固定长度)
    birth_date DATE,                         -- 可为空
    balance DECIMAL(10,2) DEFAULT 0.00,      -- 默认余额0
    signup_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP  -- 自动记录注册时间
);

跨平台兼容性处理

  • MySQL:用 AUTO_INCREMENT
  • PostgreSQL:用 SERIAL
  • SQL Server:用 IDENTITY(1,1)

创建表的高级技巧

  1. 联合主键
    CREATE TABLE orders (
        order_id INT,
        product_id INT,
        PRIMARY KEY (order_id, product_id) -- 两列组合为主键
    );
  2. 自动更新字段(如最后修改时间)
    -- MySQL示例
    last_updated TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
  3. 条件约束(值范围限制)
    age INT CHECK (age >= 18), -- 年龄必须≥18

注意事项与最佳实践

  1. 命名规范
    • 表名/列名使用小写字母 + 下划线(如 order_details
    • 避免保留字(如 select, group
  2. 性能优化
    • 为高频查询字段添加索引(如 CREATE INDEX idx_name ON user_info(username);
    • 避免过度使用 VARCHAR(MAX)
  3. 安全风险
    • 敏感字段(密码)需加密存储(如SHA-256)
    • 限制外键级联删除(ON DELETE CASCADE可能误删数据)
  4. 数据备份
    执行 CREATE TABLE 前备份数据库,防止误操作。

验证表是否创建成功

-- 查看表结构(通用命令)
DESCRIBE user_info;     -- MySQL
EXEC sp_columns 'user_info'; -- SQL Server
d user_info            -- PostgreSQL

引用说明参考自官方文档及行业实践:

  • MySQL 8.0 Reference Manual
  • Microsoft SQL Server Docs
  • PostgreSQL 15 Documentation
  • Google SQL Style Guide
    实际使用时请根据数据库版本调整语法。
0