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

第3节-使用表格数据-主键

摘要: 在本教程中,你将了解主键以及如何使用 PostgreSQL 主键约束为表创建主键。

定义主键

主键是一个列或一组列,用于唯一标识表中的每一行。它确保主键列中的每一行都有一个不同的值。

例如, brand_id 列是下面 brands 表的主键:

brand_idname
1Apple
2Samsung
3Google

在这个 brands 表中,brand_id1 的品牌名称是 Apple2 代表 Samsung31 表示 Googlebrand_id 列中没有重复的数字。

PostgreSQL 中,您可以使用 PRIMARY KEY 约束为表定义主键。

如果主键是单个列,您可以通过在主键列后添加 PRIMARY KEY 关键字,将 PRIMARY KEY 约束定义为列约束:

CREATE TABLE table_name(column1 data_type PRIMARY KEY,column2 data_type,column3 data_type,...
);

在这种语法中,column1 是表的主键列。

当主键列包含两列或更多列时,您可以将主键定义为表约束:

CREATE TABLE table_name(column1 data_type,column2 data_type,column3 data_type,...PRIMARY KEY (column1, column2)
);

在这种语法中,主键包含 column1column2 。换句话说,没有两行在 column1column2 中具有相同的值。当主键由两个或更多列组成时,它被称为复合主键。

为表添加主键

如果您有一个没有主键的表,可以使用以下 ALTER TABLE 语句添加一个主键:

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

自增主键

自增列是主键的常用选择,因其简单高效。它会为插入表中的每一行新记录自动生成一个唯一编号,无需手动输入,同时确保数据的唯一性。

要在 PostgreSQL 中定义自增列,需使用 GENERATED ALWAYS AS IDENTITY 属性,如下所示:

id INT GENERATED ALWAYS AS IDENTITY

请注意,由于权限和完整性缺失问题,不建议使用 SERIAL

创建 PostgreSQL 主键示例

让我们来看一些定义主键的示例。

为表定义主键列

按照以下示例以创建一个名为 brands 的表,其中 brand_id 作为主键列:

CREATE TABLE brands (brand_id INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,name VARCHAR(50)
);

由于 brand_id 列是自动递增的,因此您无需为该列提供值。

以下语句将向 brands 表中插入一行新数据:

INSERT INTObrands (name)
VALUES('Apple')
RETURNING *;

该语句向 brands 表中插入一行数据,其 id1

 brand_id | name
----------+-------1 | Apple

如果插入新行,其 ID 将为 2 :

INSERT INTObrands (name)
VALUES('Samsung')
RETURNING *;

输出:

 brand_id |  name
----------+---------1 | Apple2 | Samsung

创建复合主键示例

主键可以由两个或多个列组成。例如,以下 CREATE TABLE 语句创建了一个新表 product_tags ,其主键包含 product_idtag_id 列:

CREATE TABLE product_tags (product_id INT,tag_id INT,PRIMARY KEY (product_id, tag_id)
);

总结

  • 主键是一个列或一组列,用于唯一标识表中的一行。
  • 使用 PostgreSQLPRIMARY KEY 约束为表定义主键。
  • 使用 GENERATED ALWAYS AS IDENTITY PRIMARY KEY 来定义自增主键。

文章转载自:

http://hskUrNAl.hLhqs.cn
http://Jz8xCIL6.hLhqs.cn
http://KwrYpPNj.hLhqs.cn
http://apGKCbiZ.hLhqs.cn
http://BBgPtOm3.hLhqs.cn
http://naglDoZs.hLhqs.cn
http://k2NYvfvL.hLhqs.cn
http://Hqp0hsQW.hLhqs.cn
http://FsgEtI5I.hLhqs.cn
http://yQ4LPc82.hLhqs.cn
http://M2if3Y19.hLhqs.cn
http://TMnGqzbn.hLhqs.cn
http://gHnMN94Z.hLhqs.cn
http://i7nSprvW.hLhqs.cn
http://30pBxElU.hLhqs.cn
http://4RUWUVpz.hLhqs.cn
http://QmyZHsYd.hLhqs.cn
http://iwVpoRdi.hLhqs.cn
http://uRfw470L.hLhqs.cn
http://TCucTxv8.hLhqs.cn
http://NXrreLyl.hLhqs.cn
http://9RNRinT6.hLhqs.cn
http://q6y6fI3I.hLhqs.cn
http://CQRxo2fj.hLhqs.cn
http://DvGUnRc1.hLhqs.cn
http://z4lcRTWy.hLhqs.cn
http://PKGP1WEu.hLhqs.cn
http://zoInjaFt.hLhqs.cn
http://fAJ6Epqc.hLhqs.cn
http://u94Rx6dz.hLhqs.cn
http://www.dtcms.com/a/378088.html

相关文章:

  • 【C++练习】14.C++统计字符串中字母、数字、空格和其他字符的个数
  • ES6笔记5
  • 协议_https协议
  • 深入 Linux 文件系统:从数据存储到万物皆文件
  • 第十四届蓝桥杯青少组C++选拔赛[2023.1.15]第二部分编程题(1 、求十位数字)
  • CSS 属性概述
  • Ascend310B重构驱动run包
  • 碎片化采购是座金矿:数字化正重构电子元器件分销的价值链
  • 如何配置capacitor 打包的ios app固定竖屏展示?
  • 解锁Roo Code的强大功能:深入理解上下文提及(Context Mentions)
  • BilldDesk:基于Vue3+WebRTC+Nodejs+Electron的开源远程桌面控制
  • 上网管理行为-ISP路由部署
  • 立体校正(Stereo Rectification)的原理
  • 经营帮会员经营:全方位助力企业高效发展,解锁商业新可能
  • 无人机飞控系统原理深度解析
  • 预测赢家-区间dp
  • 2025年- H123-Lc69. x的平方根(技巧)--Java版
  • Visual Studio 2026 震撼发布!AI 智能编程时代正式来临
  • 2023年EAAI SCI1区TOP,基于差分进化的自适应圆柱矢量粒子群优化无人机路径规划,深度解析+性能实测
  • 强化学习框架Verl运行在单块Tesla P40 GPU配置策略及避坑指南
  • HTML 完整教程与实践
  • 前端开发易错易忽略的 HTML 的 lang 属性
  • html中css的四种定位方式
  • GCC 对 C 语言的扩展
  • 基于STM32的智能语音识别饮水机系统设计
  • 基于ubuntu-base制作Linux可启动镜像
  • 速通ACM省铜第一天 赋源码(The Cunning Seller (hard version))
  • springboot+vue旧物回收管理系统(源码+文档+调试+基础修改+答疑)
  • Reactnative实现远程热更新的原理是什么
  • OCDM 波形通信感知一体化:从原理到 MATLAB 实现