PostgreSQL 创建表格(长文讲解)

更新时间:

💡一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

  • 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...点击查看项目介绍 ;
  • 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;

截止目前, 星球 内专栏累计输出 82w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2900+ 小伙伴加入学习 ,欢迎点击围观

PostgreSQL 创建表格:基础到实践

数据库作为现代应用的核心组件,其表结构设计直接决定了数据的存储效率与查询性能。在 PostgreSQL 中,创建表格是构建数据库的第一步,也是开发者需要掌握的基础技能。本文将从语法基础到高级技巧,结合实际案例,深入讲解如何高效、规范地创建 PostgreSQL 表格。


一、基础语法详解:表格创建的核心规则

1. 基本语法结构

创建表格的核心命令是 CREATE TABLE,其基础语法如下:

CREATE TABLE 表名 (  
    字段1 数据类型 约束条件,  
    字段2 数据类型 约束条件,  
    ...  
);  

示例:创建一个简单的“学生信息表”:

CREATE TABLE students (  
    id INT PRIMARY KEY,  
    name VARCHAR(50),  
    age INT,  
    enrollment_date DATE  
);  
  • 字段定义:每个字段需指定名称、数据类型和约束条件。
  • 约束条件:如 PRIMARY KEY(主键)确保字段唯一性,VARCHAR(50) 限制字符串长度。

2. 数据类型选择

PostgreSQL 提供了丰富的数据类型,合理选择能提升存储效率和查询性能:

数据类型用途说明示例值
INT整数,存储范围约 -2^31 到 2^31-125
VARCHAR(n)可变长度字符串,n 为最大字符数"张三"
DATE日期类型,格式 YYYY-MM-DD"2023-09-15"
BOOLEAN布尔类型,存储真/假TRUE 或 FALSE
NUMERIC高精度小数,适用于金额等场景1999.99

比喻:数据类型如同“量杯”——选择过大的容器(如用 VARCHAR(255) 存储姓名)会浪费空间,而过小则可能截断数据。


二、约束的使用场景与规则

约束(Constraints)用于确保数据的完整性,是表格设计的关键环节。

1. 主键约束(PRIMARY KEY)

主键是表格中唯一标识一条记录的字段,类似身份证号的唯一性:

CREATE TABLE products (  
    product_id INT PRIMARY KEY,  
    product_name VARCHAR(100)  
);  

2. 外键约束(FOREIGN KEY)

外键用于关联两张表的字段,例如“订单表”关联“用户表”:

CREATE TABLE orders (  
    order_id INT PRIMARY KEY,  
    user_id INT,  
    FOREIGN KEY (user_id) REFERENCES users(user_id)  
);  

作用:防止订单表中存在不存在的用户 ID,保证数据关联性。

3. 唯一约束(UNIQUE)

确保字段值唯一,但允许多个 NULL 值:

CREATE TABLE employees (  
    id INT PRIMARY KEY,  
    email VARCHAR(100) UNIQUE  
);  

4. 默认值(DEFAULT)与检查约束(CHECK)

  • 默认值:为字段指定初始值:
    CREATE TABLE accounts (  
        balance NUMERIC DEFAULT 0.00  
    );  
    
  • 检查约束:限制字段取值范围:
    CREATE TABLE users (  
        age INT CHECK (age BETWEEN 18 AND 120)  
    );  
    

三、索引优化:提升查询性能的关键

索引(Index)如同书籍的目录,能加速特定字段的查询。创建索引的语法如下:

CREATE INDEX 索引名 ON 表名 (字段名);  

示例:为学生表的姓名字段创建索引:

CREATE INDEX idx_students_name ON students (name);  

注意事项

  • 索引会占用额外存储空间,且可能降低写入性能(如 INSERT)。
  • 常见查询的字段(如 WHEREJOIN 条件)适合建立索引。

四、高级技巧:继承与分区表

1. 表继承(Table Inheritance)

PostgreSQL 支持表继承,允许子表继承父表的结构:

CREATE TABLE employees (  
    id INT PRIMARY KEY,  
    name VARCHAR(50)  
);  

CREATE TABLE managers (  
    salary NUMERIC  
) INHERITS (employees);  

效果managers 表自动包含 idname 字段,还可新增 salary 字段。

2. 表分区(Table Partitioning)

对大数据表进行分区,可提升查询效率。例如按时间分区的订单表:

CREATE TABLE orders (  
    order_id INT PRIMARY KEY,  
    order_date DATE  
) PARTITION BY RANGE (order_date);  

CREATE TABLE orders_2023 PARTITION OF orders  
    FOR VALUES FROM ('2023-01-01') TO ('2024-01-01');  

五、常见问题与注意事项

1. 错误:未指定数据类型

CREATE TABLE test (name);  -- ❌ 缺少数据类型  

修正

CREATE TABLE test (name VARCHAR(50));  

2. 约束顺序与字段顺序无关

约束条件的书写顺序不影响功能,但建议将主键和外键约束写在字段定义中,提高可读性。

3. 注意事务与模式(Schema)

若需指定模式(如 public),需在表名前添加:

CREATE TABLE public.students (...);  

六、实践案例:设计一个电商数据库

1. 创建用户表

CREATE TABLE users (  
    user_id INT PRIMARY KEY,  
    username VARCHAR(50) UNIQUE,  
    email VARCHAR(100) UNIQUE,  
    created_at TIMESTAMP DEFAULT NOW()  
);  

2. 创建订单表并关联用户

CREATE TABLE orders (  
    order_id INT PRIMARY KEY,  
    user_id INT REFERENCES users(user_id),  
    total_amount NUMERIC CHECK (total_amount > 0),  
    order_time TIMESTAMP DEFAULT NOW()  
);  

3. 创建商品表并索引

CREATE TABLE products (  
    product_id INT PRIMARY KEY,  
    product_name VARCHAR(200),  
    price NUMERIC,  
    stock INT  
);  

CREATE INDEX idx_products_price ON products (price);  

结论

PostgreSQL 创建表格是数据库设计的基础,其核心在于合理选择数据类型、约束条件和索引策略。通过本文的语法解析、案例演示和常见问题解答,开发者可以逐步掌握从简单到复杂的表格设计方法。建议读者通过动手实践(如创建电商数据库)加深理解,并根据实际需求优化表结构,以实现高效的数据管理。

掌握表格创建的规范与技巧,不仅能提升代码质量,更能为后续的查询优化和系统扩展奠定坚实基础。

最新发布