【PostgreSQL】从零开始:(三十九)约束-主键

news/2024/7/9 22:14:21 标签: postgresql, oracle, 数据库

主键

主键(Primary Key)是数据库表中用于唯一标识每一行记录的字段。主键具有以下特点:

  • 唯一性:每个主键值在表中是唯一的,不允许出现重复值。
  • 非空性:主键字段的值不能为空,即主键字段不能为null。
  • 不可更改性:一旦主键值被分配给某行记录,就不能再修改。

主键在数据库中起到了索引的作用,可以提高查询效率。通常,数据库表的每一行记录都应该有一个主键字段。常见的主键类型包括自增长整数(如自增长的ID字段)、GUID(全局唯一标识符)等。

主键约束指示一列或一组列可用作表中行的唯一标识符。这要求值既是唯一的,又不是 null。因此,以下两个表定义接受相同的数据:

PostgreSQL中的主键

PostgreSQL中的主键是用于唯一标识表中记录的一列或一组列。主键具有以下特点:

  • 主键必须是唯一的,每个记录必须有一个唯一的主键值。
  • 主键不能为NULL,每个记录必须有一个非空的主键值。
  • 主键可以由一列或多列组成。
  • 主键可以用来引用其他表中的记录(外键)。
  • 主键值由数据库自动生成或由用户指定。
CREATE TABLE products (
    product_no integer UNIQUE NOT NULL,
    name text,
    price numeric
);
CREATE TABLE products (
    product_no integer PRIMARY KEY,
    name text,
    price numeric
);

主键可以跨越多个列;语法类似于 Unique Constraints:

CREATE TABLE example (
    a integer,
    b integer,
    c integer,
    PRIMARY KEY (a, c)
);

添加主键将自动在主键中列出的列或列组上创建唯一的 B 树索引,并强制标记这些列NOT NULL。

一个表最多可以有一个主键。(可以有任意数量的唯一和非空约束,它们在功能上几乎相同,但只能将一个约束标识为主键。关系数据库理论规定每个表都必须有一个主键。PostgreSQL 不强制执行此规则,但通常最好遵循它。

主键对于文档和客户端应用程序都很有用。例如,允许修改行值的 GUI 应用程序可能需要知道表的主键才能唯一地标识行。如果已声明主键,数据库系统还可以通过多种方式使用主键;例如,主键为引用其表的外键定义默认目标列。

除了在创建表时定义主键,还可以使用以下语法在已有的表中添加主键:

ALTER TABLE table_name
ADD CONSTRAINT constraint_name PRIMARY KEY (column1, column2, ...);

在上述语法中,constraint_name是主键约束的名称,column1, column2, …是主键列的名称。

使用主键可以提高数据的检索效率,并确保数据的完整性和唯一性。


http://www.niftyadmin.cn/n/5297751.html

相关文章

C++每日一练(8):图像相似度

题目描述 给出两幅相同大小的黑白图像(用0-1矩阵)表示,求它们的相似度。 说明:若两幅图像在相同位置上的像素点颜色相同,则称它们在该位置具有相同的像素点。两幅图像的相似度定义为相同像素点数占总像素点数的百分比。…

如何解决大模型的【幻觉】问题?

当我们深入研究大型语言模型(LLM)的运作机制时,我们不可避免地会遇到一个被频繁讨论的问题——“幻觉”现象。这个术语在LLM的领域中指的是模型产生的输出与现实世界的不符,或者是基于错误的、误导性的信息。这种情况不仅削弱了模…

掌握 C++ 中 static 关键字的多种使用场景

static是什么 在最开始C中引入了static关键字可以用于修饰变量和函数,后来由于C引入了class的概念,现在static可以修饰的对象分为以下5种: 成员变量,成员函数,普通函数,局部变量, 全局变量 s…

Spark大数据分析与实战笔记(第二章 Spark基础-01)

文章目录 第2章 Spark基础章节概要2.1 初识Spark2.1.1 Spark概述2.1.2 Spark的特点2.1.3 Spark应用场景2.1.4 Spark与Hadoop对比 第2章 Spark基础 章节概要 Spark于2009年诞生于美国加州大学伯克利分校的AMP实验室,它是一个可应用于大规模数据处理的统一分析引擎。…

前端--基础 目录文件夹和根目录 VScode打开目录文件夹

目录 目录文件夹和根目录 : 目录文件夹 : 根目录 : VScode 打开目录文件夹 : VScode 打开文件夹 : 拖拽目录文件夹 : 目录文件夹和根目录 : 我们都清楚,在实际的工作中会…

Python pycharm编辑器修改代码字体

在pycharm编辑器下修改代码字体,可以按照以下步骤: 点开上图所示的菜单, 再点击File->Settings,进入设置页面。 我们找到Editor下的Font并点选,然后我们就可以在右侧修改字体相关配置了。 这里建议使用等宽字体&…

数据结构【线性表篇】(二)

数据结构【线性表篇】(二) 文章目录 数据结构【线性表篇】(二)前言为什么突然想学算法了?为什么选择码蹄集作为刷题软件? 目录一、单链表(一)、单链表的定义(二)、单链表的建立(三)、单链表的插入删除(四)、单链表的查找 二、主函…

小秋SLAM入门实战C++所有文章汇总

如何更好的理解类的成员变量和局部变量用途用法? 循环结构 while、break、continue高级用法 循环结构 for、break、continue高级用法 选择结构 if、else if、else、三元运算符、switch 高级用法 C代码编译出现 error: ‘xxx’ does not name a type 错误的原因和解决…