当前位置: 首页 > article >正文

PostgreSQL 中约束Constraints

在 PostgreSQL 中,约束(Constraints)是用于限制进入数据库表中数据的规则。它们确保数据的准确性和可靠性,通过定义规则来防止无效数据的插入或更新。PostgreSQL 支持多种类型的约束,每种约束都有特定的用途和语法。以下是主要的约束类型及其简要说明:

  1. PRIMARY KEY(主键约束)

    • 确保表中每一行的唯一标识。
    • 主键列的值必须唯一且不能为空(NOT NULL)。
    • 一个表只能有一个主键,但主键可以包含多个列(复合主键)。
    CREATE TABLE students (
        student_id SERIAL PRIMARY KEY,
        name VARCHAR(100) NOT NULL
    );
    
  2. FOREIGN KEY(外键约束)

    • 确保在一个表中的值在另一个表的主键或唯一键中存在。
    • 用于维护表之间的参照完整性。
    CREATE TABLE enrollments (
        enrollment_id SERIAL PRIMARY KEY,
        student_id INT,
        course_id INT,
        FOREIGN KEY (student_id) REFERENCES students(student_id),
        FOREIGN KEY (course_id) REFERENCES courses(course_id)
    );
    
  3. UNIQUE(唯一约束)

    • 确保列中的所有值都是唯一的。
    • 允许空值(NULL),但多个空值不违反唯一性。
    CREATE TABLE students (
        student_id SERIAL PRIMARY KEY,
        email VARCHAR(100) UNIQUE
    );
    
  4. CHECK(检查约束)

    • 确保列中的值满足指定的条件。
    • 可以在列级别或表级别定义。
    CREATE TABLE students (
        student_id SERIAL PRIMARY KEY,
        age INT CHECK (age >= 0 AND age <= 120)
    );
    
  5. NOT NULL(非空约束)

    • 确保列中的值不能为空。
    • 可以在列定义时直接指定。
    CREATE TABLE students (
        student_id SERIAL PRIMARY KEY,
        name VARCHAR(100) NOT NULL
    );
    
  6. EXCLUDE(排除约束)

    • 确保使用指定的运算符(如等于、不等于、小于、大于等)的列组合中的值不会冲突。
    • 通常用于确保地理数据(如经纬度)不会重叠。
    CREATE TABLE circles (
        circle_id SERIAL PRIMARY KEY,
        center POINT,
        radius DOUBLE PRECISION,
        EXCLUDE USING GIST (circle_with_radius WITH =, circle_with_center WITH &&)
    ) WHERE (radius > 0);
    

    在上面的例子中,circle_with_radiuscircle_with_center 是使用表达式索引定义的虚拟列,用于确保没有两个圆重叠。

  7. DEFAULT(默认值约束)

    • 为列指定默认值,当插入数据时没有为该列提供值时,将使用默认值。
    CREATE TABLE students (
        student_id SERIAL PRIMARY KEY,
        enrollment_date DATE DEFAULT CURRENT_DATE
    );
    

通过合理地使用这些约束,可以确保数据库中的数据保持一致性、准确性和完整性。在定义表结构时,应该根据业务需求选择适当的约束来限制数据输入。


http://www.kler.cn/a/410150.html

相关文章:

  • 5. Autogen官网教程 (Tool Use)
  • TSmaster CAN/CANFD 诊断(Diagnostic_CAN)
  • 蓝桥杯每日真题 - 第21天
  • 跨平台应用开发框架(1)----Qt(组件篇)
  • SCAU软件体系结构实验四 组合模式
  • uniapp接入高德地图
  • Oracle 数据库 23ai 新特性: Schema Annotations
  • react中的useCallback 有什么作用?
  • SQL Server数据库日志(ldf文件)清理
  • GPT中转站技术架构
  • 微软发布「AI Shell」
  • CentOS环境上离线安装python3及相关包
  • 图像标签格式转换
  • 算法笔记:单调队列
  • 如何在树莓派5+ubunut24上编译Qt5.15.15
  • 文件上传代码分析
  • C++数据结构与算法
  • 干货分享|分布式数据科学工具 Xorbits 的使用
  • k8s中部署filebeat进行日志监听并发送到es中
  • 门控循环单元(GRU)与时间序列预测应用
  • spring boot jpa中 Hibernate 注解 @Immutable 的使用场景
  • 二叉树oj题解析
  • jQuery-Word-Export 使用记录及完整修正文件下载 jquery.wordexport.js
  • 系统设计时应时刻考虑设计模式基础原则
  • flutter 专题十一 Fair原理篇Fair逻辑动态化架构设计与实现
  • 永磁同步电机末端振动抑制(输入整形)