SQL主键怎么使用,你会了吗?

简介: SQL主键怎么使用,你会了吗?

Primary Key 的重要性和使用方法

image.png

SQL主键(Primary Key)是关系数据库中的一个重要概念,它用于唯一标识表中的每一行数据,并确保数据的完整性和一致性。本文将介绍SQL主键的定义、作用以及在数据库设计和查询中的使用方法。

Primary Key

主键是一列或一组列,用于唯一标识表中的每一行数据。主键有如下作用:

  1. 唯一标识数据:主键确保表中的每一行数据都具有唯一的标识符,避免了数据冗余和重复。
  2. 数据完整性:主键约束确保表中的主键列不包含空值(NULL),并且每个主键值都是唯一的。这样可以防止数据不完整或不一致的情况发生。
  3. 关系建立:主键可以用作与其他表之间建立关系的依据,实现表之间的连接和引用。

当主键包含多个字段时,又称为复合键(Composite Primary Key)。

注意事项

在设计主键时,应使用尽可能少的字段,这不但能减少存储空间,还能提升查询性能。主键包含的字段越少,所需要的存储空间就越小,就性能而言,更少的数据意味着更快速地处理。

SQL 规定,主键长度不能超过 900 个字节。Oracle 规定,主键不能超过 32 个字段。

创建主键

我们可以通过如下方法创建主键:

  1. 在创建表时定义主键,代码如下:
CREATE TABLE 表名 (1 数据类型 PRIMARY KEY,2 数据类型,
    ...
);
  1. 创建表后定义主键,代码如下:
ALTER TABLE 表名
ADD PRIMARY KEY (1);

删除主键

使用下面的语句可以删除表的主键约束:

ALTER TABLE 表名 DROP PRIMARY KEY;

主键的约束和属性

主键可以具有以下约束和属性:

  • 唯一性约束(UNIQUE):主键的值必须是唯一的,不能重复。
  • 非空约束(NOT NULL):主键的值不能为NULL,确保数据完整性。
  • 自动递增属性(AUTO_INCREMENT):主键的值可以自动增长,简化插入操作。

主键使用原则

在使用主键时,我们可以遵循下列原则,提升数据库的性能,方便我们的使用:

  • 选择合适的列作为主键:主键应选择那些稳定、唯一且不可更改的列作为标识符。
  • 避免过度使用复合主键:复合主键由多个列组成,但过多的复合主键可能导致查询和维护复杂性增加。
  • 考虑性能因素:主键的选择和设计应考虑查询性能,尽量避免使用过长的列作为主键。
  • 处理主键冲突:在插入数据时,需要处理可能出现的主键冲突情况,如使用自动递增主键或手动处理。

使用示例

比如我们要创建一个Customers的表,包含id等字段,如下:

CREATE TABLE Customers (
    id      INT              NOT NULL   AUTO_INCREMENT,
    name    VARCHAR(20)      NOT NULL,
    age     TINYINT UNSIGNED NOT NULL,
    city    INT UNSIGNED     NOT NULL,
    Consumption amount      FLOAT       DEFAULT '0.0',
    country CHAR(3)          NOT NULL   DEFAULT '',
    email   VARCHAR(30)  UNIQUE  NOT NULL,
    PRIMARY KEY (id)
);

我们将id设置为了Customers的主键,并且将其设置为自增。

如果 Customers 表和 id字段都已经存在,则可以使用 ALTER TABLE命令添加主键,语法如下:

ALTER TABLE Customers ADD PRIMARY KEY (id);

注:只有在首次创建数据表时,那些被声明为不能包含 NULL 值的字段,才能使用 ALTER TABLE 命令添加为主键。

如果我们在创建表时,需要添加多个主键,语法如下:

CREATE TABLE Customers (
    id      INT              NOT NULL   AUTO_INCREMENT,
    name    VARCHAR(20)      NOT NULL,
    age     TINYINT UNSIGNED NOT NULL,
    city    INT UNSIGNED     NOT NULL,
    Consumption amount      FLOAT       DEFAULT '0.0',
    country CHAR(3)          NOT NULL   DEFAULT '',
    email   VARCHAR(30)  UNIQUE  NOT NULL,
    PRIMARY KEY (id, email)
);

上述语法即将idemail设置为主键。

如果 Customers 表已经存在,则可以使用下面的 SQL 语句在 idemail字段上添加主键:

ALTER TABLE Customers
ADD CONSTRAINT PK_CUSTID PRIMARY KEY (id, email);

当我们要删除 Customers 表主键时,语法如下:

ALTER TABLE Customers DROP PRIMARY KEY;

总结

SQL主键是关系数据库中确保数据完整性和一致性的重要机制。通过为表中的每一行数据定义唯一的标识符,主键保证了数据的唯一性,允许有效地进行数据操作和查询。使用主键,可以建立表之间的关系,并提高数据库的性能和可维护性。因此,在数据库设计和查询过程中,合理定义和使用主键是至关重要的一步。

相关文章
|
8月前
|
搜索推荐 数据挖掘
优质网络舆情监测系统大盘点
一款出色的网络舆情监测系统,不仅能够助力相关主体迅速捕捉舆情信息,有效应对危机,还能够助力其更好地把握舆论动态,维护自身形象。那么,市场上有哪些比较好的网络舆情监测系统呢?这里,本文有为各位整理了一些好用的舆情检测系统,以供各位参考!
310 0
|
12月前
|
Java
在Java多线程编程中,实现Runnable接口通常优于继承Thread类
【10月更文挑战第20天】在Java多线程编程中,实现Runnable接口通常优于继承Thread类。原因包括:1) Java只支持单继承,实现接口不受此限制;2) Runnable接口便于代码复用和线程池管理;3) 分离任务与线程,提高灵活性。因此,实现Runnable接口是更佳选择。
234 2
|
机器学习/深度学习 人工智能 算法
深度学习之材料性能预测
基于深度学习的材料性能预测是材料科学领域的一个前沿研究方向,它结合了人工智能和材料学,通过分析和建模复杂的材料数据,来预测材料的性能和特性。
441 4
|
缓存 Java API
API接口性能优化管理
在数字化时代,API性能优化对于提升软件效率和用户体验至关重要。本文介绍了多种优化方法:配置优化包括调整JVM参数等;代码层面减少重复调用并批量操作数据库;池化技术如线程池和HTTP连接池能有效利用资源;数据库优化通过索引提高查询速度;异步处理则使主流程业务不受阻塞;缓存策略如Redis缓存减少数据库访问;可观测性工具如日志平台和APM帮助监控性能。综合运用这些方法,可根据业务需求持续调整优化,显著提升API性能及用户体验。
|
缓存 负载均衡 数据库
优化后端性能:提升Web应用响应速度的关键策略
在当今数字化时代,Web应用的性能对于用户体验至关重要。本文探讨了如何通过优化后端架构和技术手段,提升Web应用的响应速度。从数据库优化、缓存机制到异步处理等多个方面进行了深入分析,并提出了一系列实用的优化策略,以帮助开发者更好地应对日益增长的用户访问量和复杂的业务需求。
770 28
|
Java Spring
【亲测有效完结bug】org.springframework.web.util.NestedServletException: Handler dispatch failed; nested exce
【亲测有效完结bug】org.springframework.web.util.NestedServletException: Handler dispatch failed; nested exce
1457 0
|
IDE Java 开发工具
灵活配置 Spring 集合:List、Set、Map、Properties 详解
使用<property>标签的value属性配置原始数据类型和ref属性配置对象引用的方式来定义Bean配置文件。这两种情况都涉及将单一值传递给Bean
329 1
|
IDE Java Maven
【项目问题解决】SpringBoot错误: 找不到或无法加载主类
SpringBoot应用启动时若出现“找不到或无法加载主类”错误,常见原因包括配置问题、编译问题或IDE设置不当。解决方法包括:检查`application.properties`配置,执行`maven clean install`,删除`.idea`文件后重导入IDEA,确保启动类路径正确,清理并重新编译项目,检查项目配置、依赖项及IDEA配置。参考CSDN和知乎相关文章。
7119 0
|
存储 Java
黑马全套Java教程(九):网络编程(四)
黑马全套Java教程(九):网络编程
129 0
|
SQL druid 关系型数据库
druid配置详解表
druid配置详解表
843 0
下一篇
oss教程