网站首页 > 技术文章 正文
本文将带你深入了解SQL中的PRIMARY KEY约束,通过示例演示如何正确使用PRIMARY KEY约束,以及它对数据库表的设计和维护带来的诸多好处。
一、引言
在数据库设计中,表的规范化和高效性是至关重要的。而PRIMARY KEY约束作为SQL中的一种重要约束,不仅能够确保表中的数据唯一性,还能提高查询效率,优化数据库性能。本文将带你深入了解PRIMARY KEY约束的原理和实际应用,让你在设计数据库时更加得心应手。
二、PRIMARY KEY约束的作用
1. 唯一性:PRIMARY KEY约束确保一列或列组合中的数据唯一,即在一个表中,只能有一个记录的某一列或列组合的值是唯一的。
2. 非空性:PRIMARY KEY约束自动为表添加NOT NULL约束,即列中的值不能为NULL。
3. 增加查询效率:PRIMARY KEY约束可以加快查询速度,因为索引可以加快查找速度。
4. 优化数据库性能:通过合理地使用PRIMARY KEY约束,可以避免数据冗余,减少数据存储空间,提高数据库性能。
三、如何使用PRIMARY KEY约束
示例:下面的 SQL 在 "Persons" 表创建时在 "P_Id" 列上创建 PRIMARY KEY 约束:
MySQL:
CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
PRIMARY KEY (P_Id)
)
SQL Server / Oracle:
CREATE TABLE Persons
(
P_Id int NOT NULL PRIMARY KEY,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
如需命名 PRIMARY KEY 约束,并定义多个列的 PRIMARY KEY 约束,请使用下面的 SQL 语法:
MySQL / SQL Server / Oracle:
CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT pk_PersonID PRIMARY KEY (P_Id,LastName)
)
注释:在上面的实例中,只有一个主键 PRIMARY KEY(pk_PersonID)。然而,pk_PersonID 的值是由两个列(P_Id 和 LastName)组成的。
ALTER TABLE 时的 SQL PRIMARY KEY 约束
当表已被创建时,如需在 "P_Id" 列创建 PRIMARY KEY 约束,请使用下面的 SQL:
MySQL / SQL Server / Oracle:
ALTER TABLE Persons
ADD PRIMARY KEY (P_Id)
如需命名 PRIMARY KEY 约束,并定义多个列的 PRIMARY KEY 约束,请使用下面的 SQL 语法:
MySQL / SQL Server / Oracle:
ALTER TABLE Persons
ADD CONSTRAINT pk_PersonID PRIMARY KEY (P_Id,LastName)
注释:如果您使用 ALTER TABLE 语句添加主键,必须把主键列声明为不包含 NULL 值(在表首次创建时)。
撤销 PRIMARY KEY 约束
如需撤销 PRIMARY KEY 约束,请使用下面的 SQL:
MySQL:
ALTER TABLE Persons
DROP PRIMARY KEY
SQL Server / Oracle:
ALTER TABLE Persons
DROP CONSTRAINT pk_PersonID
四、PRIMARY KEY约束的注意事项
1. 一张表中只能有一个PRIMARY KEY。
2. PRIMARY KEY约束默认为NOT NULL。
3. 在添加PRIMARY KEY约束时,建议选择不易重复且不会为空的字段。
4. 已经添加了PRIMARY KEY约束的字段,不能修改数据类型。
五、结语
通过本文的介绍,相信你已经对SQL中的PRIMARY KEY约束有了更深入的了解。合理地使用PRIMARY KEY约束,不仅可以提高数据库的规范性和高效性,还能为你的项目带来诸多便利。在实际开发中,我们需要根据业务需求和数据特点,灵活运用PRIMARY KEY约束,为数据库的设计和维护打下坚实的基础。
猜你喜欢
- 2025-07-10 分布式之系统底层原理(上)(底层分布式技术)
- 2025-07-10 MySQL面试题整理:从基础到高级的全面覆盖
- 2025-07-10 MySQL从入门到实战:表设计、索引优化与高频面试解析
- 2025-07-10 Spring框架基础知识-第三节内容(spring框架用法)
- 2025-07-10 一个非教条式的TDD例子(一个非一个虫)
- 2025-07-10 SQL 开发必学:深度解析 NULL 值处理的 6 大核心规则与避坑指南
- 2025-07-10 关系型数据库设计要领(值得收藏)(关系型数据库有哪些设计范式)
- 2025-07-10 Oracle数据库中判断字段不为空?(oracle数据库中判断字段不为空的函数)
- 2024-10-17 oracle数据库设计总结|三大范式 oracle数据库设计规范
- 2024-10-17 数据库(Oracle)序列(Sequence)的基本使用
你 发表评论:
欢迎- 07-10Oracle 与 Google Cloud 携手大幅扩展多云服务
- 07-10分享收藏的 oracle 11.2.0.4各平台的下载地址
- 07-10Oracle 和 Microsoft 推出 Oracle Exadata 数据库服务
- 07-10Oracle Database@Azure 推进到南美等新区域并增加了新服务
- 07-10Oracle宣布推出 Oracle Database@AWS 的有限预览版
- 07-10Oracle与Nextcloud合作,推出主权云上的安全协作平台
- 07-10NodeRED魔改版连接MsSql、PostgreSQL、MySQL、OracleDB存储无忧
- 07-10对于企业数据云备份,“多备份”承诺的是成本更低,管理更高效#36氪开放日深圳站#
- 601℃几个Oracle空值处理函数 oracle处理null值的函数
- 593℃Oracle分析函数之Lag和Lead()使用
- 581℃0497-如何将Kerberos的CDH6.1从Oracle JDK 1.8迁移至OpenJDK 1.8
- 578℃Oracle数据库的单、多行函数 oracle执行多个sql语句
- 573℃Oracle 12c PDB迁移(一) oracle迁移到oceanbase
- 566℃【数据统计分析】详解Oracle分组函数之CUBE
- 552℃最佳实践 | 提效 47 倍,制造业生产 Oracle 迁移替换
- 547℃Oracle有哪些常见的函数? oracle中常用的函数
- 最近发表
-
- Oracle 与 Google Cloud 携手大幅扩展多云服务
- 分享收藏的 oracle 11.2.0.4各平台的下载地址
- Oracle 和 Microsoft 推出 Oracle Exadata 数据库服务
- Oracle Database@Azure 推进到南美等新区域并增加了新服务
- Oracle宣布推出 Oracle Database@AWS 的有限预览版
- Oracle与Nextcloud合作,推出主权云上的安全协作平台
- NodeRED魔改版连接MsSql、PostgreSQL、MySQL、OracleDB存储无忧
- 对于企业数据云备份,“多备份”承诺的是成本更低,管理更高效#36氪开放日深圳站#
- 解读丨《归档文件整理规则》— 电子文件元数据存储
- Data Guard跳归档恢复的实践(dataguard failover)
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端aes加密 (58)
- 前端脚手架 (56)
- 前端md5加密 (54)
- 前端路由 (61)
- 前端数组 (73)
- 前端js面试题 (50)
- 前端定时器 (59)
- 前端获取当前时间 (50)
- Oracle RAC (76)
- oracle恢复 (77)
- oracle 删除表 (52)
- oracle 用户名 (80)
- oracle 工具 (55)
- oracle 内存 (55)
- oracle 导出表 (62)
- oracle约束 (54)
- oracle 中文 (51)
- oracle链接 (54)
- oracle的函数 (57)
- 前端调试 (52)
本文暂时没有评论,来添加一个吧(●'◡'●)