MySQL基础扎实——主键与候选键

news2024/11/18 7:50:18

在这里插入图片描述

词义解释

主键(Primary Key)和候选键(Candidate Key)是关系型数据库中的术语,用于标识和唯一确定表中的记录。它们之间有以下区别:

  1. 唯一性:主键是表中的唯一标识,每个表只能有一个主键,而候选键是可以作为主键的备选项,并且每个候选键也必须具有唯一性。

  2. 空值(NULL):主键不允许包含空值(NULL),也就是说,主键必须在每个记录中都有一个非空值。而候选键可以包含空值或重复值。

  3. 唯一标识性:主键用于唯一地标识表中的每个记录,确保每个记录具有唯一的标识符。候选键也具有唯一性,但它们可能会被用作其他目的,如参照外键或用于数据的逻辑关联。

  4. 选择性:主键是必选的,也就是说,每个记录必须具有主键值。而候选键可以被选择性地用作主键,当然,前提是满足唯一性和非空的要求。

需要注意的是,候选键可能包含多个列,这种情况下称为复合候选键(Composite Candidate Key)。复合候选键要求组合键的值在全表中都是唯一的,但单独的每一列可能不满足唯一性。

综上所述,主键在关系型数据库中具有特殊的作用,用于标识和唯一确定表中的记录,而候选键是可以代替主键的备选项,但它们需要满足唯一性和非空性的要求。

创建主键

要创建主键,可以在表的创建过程中或表已存在时使用 ALTER TABLE 语句来指定主键约束。下面是几种常见的创建主键的示例代码:

在表的创建过程中指定主键:

-- 创建一个学生表,并指定主键
CREATE TABLE students (
    student_id INT PRIMARY KEY,
    student_name VARCHAR(50) NOT NULL,
    student_email VARCHAR(50),
    student_age INT,
    student_major VARCHAR(50)
);

上述代码中,student_id 列被指定为主键。

在表已存在时使用 ALTER TABLE 添加主键约束:

-- 在已存在的表上添加主键约束
ALTER TABLE students 
ADD CONSTRAINT pk_students PRIMARY KEY (student_id);

上述代码中,students 表已存在,并使用 ALTER TABLE 语句添加了名为 pk_students 的主键约束,该主键由 student_id 列组成。

无论是在表的创建过程中还是在已存在的表上使用 ALTER TABLE 添加主键约束,都需要指定主键所涉及的列,并为主键指定一个名称(可选)。

创建主键约束后,数据库会自动确保被指定为主键的列包含唯一的、非空的值。如果试图插入具有相同主键值的记录或将空值插入主键列,则会导致插入失败或触发错误。

创建候选键

在关系型数据库中,候选键是能够唯一标识每行数据的一组列。它们可以由一个或多个列组成。以下是创建候选键的示例代码:

在表的创建过程中指定候选键:

-- 创建一个员工表,并指定候选键
CREATE TABLE employees (
    employee_id INT,
    employee_name VARCHAR(50) NOT NULL,
    employee_email VARCHAR(50) UNIQUE,
    employee_department VARCHAR(50),
    employee_salary DECIMAL(10, 2),
    CONSTRAINT uk_employee_email_department UNIQUE (employee_email, employee_department)
);

上述代码中,候选键由 employee_emailemployee_department 列组成。通过 CONSTRAINT 关键字,我们在表的创建过程中指定了候选键的约束,并为候选键指定了名称 uk_employee_email_department

在已存在的表上使用 ALTER TABLE 添加候选键约束:

-- 在已存在的表上添加候选键约束
ALTER TABLE employees 
ADD CONSTRAINT uk_employee_email_department UNIQUE (employee_email, employee_department);

上述代码中,employees 表已存在,并使用 ALTER TABLE 语句添加了名为 uk_employee_email_department 的候选键约束,该候选键由 employee_emailemployee_department 列组成。

无论是在表的创建过程中还是在已存在的表上使用 ALTER TABLE 添加候选键约束,都需要指定候选键所涉及的列,并为候选键指定一个名称(可选)。

候选键约束确保候选键所涉及的列数据的组合是唯一的。这意味着不允许插入重复的候选键组合值。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/799972.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

环境保护数据传输系统监测环境指标

嵌入式实时操作系统(RTOS)是一种专门设计用于嵌入式系统的操作系统。它具有实时性能和低延迟的特点,能够满足对时间响应性要求较高的应用。本文介绍了一种具备Modbus Slave和Modbus Master功能的嵌入式实时操作系统设备,以及其扩展…

OpenGL Metal Shader 编程:ShaderToy 内置全局变量

OpenGL & Metal Shader 编程:ShaderToy 内置全局变量 前面发了一些关于 Shader 编程的文章,有读者反馈太碎片化了,希望这里能整理出来一个系列,方便系统的学习一下 Shader 编程。 由于主流的 Shader 编程网站,如…

Dart - 语法糖(持续更新)

文章目录 前言开发环境中间表示语法糖1. 操作符/运算符(?./??/??/../?../.../...?)2. 循环(for-in)3. 函数/方法(>)4. 关键字(await for) 最后 前言 通过将dill文件序列化…

【时间序列预测 2023 ICLR】TimesNet

【时间序列预测 2023 ICLR】TimesNet 论文题目:TIMESNET: TEMPORAL 2D-VARIATION MODELING FOR GENERAL TIME SERIES ANALYSIS 中文题目:TimesNet:用于一般时间序列分析的时态二维变异建模 论文链接:https://arxiv.org/abs/2210.02186 论文代…

大专同事一个人7天完成CRM系统开发,怪不得月薪3w

在当今的快节奏商业环境中,成功的关键是敏捷和高效。这使得开发自己的客户关系管理系统(CRM)成为许多企业的迫切需求。CRM有助于跟踪和优化销售线索,管理客户交互,并提高业务效率。但是,对于许多企业来说&a…

大学毕业后,我就去当了2个月外卖骑手,哭了一整晚

先简单介绍一下自己,我来自长沙,大学学的的物流管理专业,现在就职于一家互联网公司,从事软件测试工作。 我来自长沙县的一个偏远农村,家里兄弟姐妹多,父母无力负担我的学费,很多时候学费都是靠姐…

智慧工厂4G+蓝牙+UWB+RTK人员定位系统解决方案

人员定位在智慧工厂的应用正逐渐受到重视,通过使用现代化的技术和智能终端设备,工厂管理者能够实时定位和跟踪员工的位置,方便进行人员调度管理和监督人员的工作情况;人员遇到紧急情况,可通过定位设备一键报警求救&…

智慧消防:如何基于视频与智能分析技术搭建可视化风险预警平台?

一、背景分析 消防安全是一个重要的话题,涉及到每个人的生活和安全。每年都会发生大量的火灾,给人们带来极大的危害,摧毁了大量的财产,甚至造成了可怕的人员伤亡。而消防安全监督管理部门人员有限,消防安全监管缺乏有…

2.2 模型与材质基础

一、渲染管线与模型基础 1. 渲染管线 可编程阶段(蓝色区域): 1顶点着色器 2几何着色器 3片元着色器 2. 模型的实现原理 UV:在建模软件中,进行UV展开,UV会放在一个横向为U纵向为V,范围&#xff0…

TEE GP(Global Platform)功能认证实验室

TEE之GP(Global Platform)认证汇总 GP认证实验室主要面向功能认证、SE安全认证、TEE安全认证,对于TEE来说,则分为TEE功能认证和TEE安全认证。本文对功能认证相关实验室机构进行总结和介绍。 一、国内3家 二、国外3家 参考: GlobalPlatform …

回归预测 | MATLAB实现POA-CNN-BiLSTM鹈鹕算法优化卷积双向长短期记忆神经网络多输入单输出回归预测

回归预测 | MATLAB实现POA-CNN-BiLSTM鹈鹕算法优化卷积双向长短期记忆神经网络多输入单输出回归预测 目录 回归预测 | MATLAB实现POA-CNN-BiLSTM鹈鹕算法优化卷积双向长短期记忆神经网络多输入单输出回归预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 MATLA…

安全杂记 - js中的this关键字

javascript里什么是this this是js中的一个关键字&#xff0c;它是函数在运行时生成的一个内部对象&#xff0c;是属性和方法。 this就是属性或方法“当前”所在的对象&#xff0c;也就是调用函数的那个对象 this的使用场合 1.函数调用 <script>var a100;function test…

jenkins部署vue项目

文章目录 1 先安装node.js上传到linux并解压 jenkins 创建任务执行脚本 build Stepsvue jenkins shell 脚本 (jenkins-web.sh)启动 如何在linux上安装jenkins可以看上一篇 linux安装jenkins(详细步骤) 1 先安装node.js 建议最好跟你本地安装版本一致,减少没有必要的麻烦:node.…

UCloud上线可商用LLaMA2镜像,助力AGI应用发展

随着人工智能技术的快速发展&#xff0c;大模型应用在自然语言处理、图像识别、智能交互等领域展现出了巨大的潜力&#xff0c;为企业带来了更多创新和商机。众多企业纷纷将大模型应用于产品开发和业务优化中&#xff0c;希望通过提升智能化水平和用户体验来赢得竞争优势。近日…

【黑马头条之文章详情-静态文件生成】

本笔记内容为黑马头条项目的文章详情-静态文件生成部分 目录 一、思路分析 二、实现步骤 基础知识可参考下面两篇文章 【黑马头条之对象存储服务MinIO】_蛋饼吧的博客-CSDN博客 【黑马头条之freemarker入门】_蛋饼吧的博客-CSDN博客 一、思路分析 文章端创建app相关文章时…

如何获得SOLIDWORKS全认证资格证书!

SolidWorks认证考试 完成SolidWorks认证考试并获得专业SolidWorks认证是一项伟大的成就。它不仅在你的简历上自豪地闪耀&#xff0c;而且还向雇主、决策者和同事展示了你对软件的技能和知识水平。公司通常会将某些策略和标准设定为一项业务&#xff0c;以帮助保持在竞争中的领头…

桃子叶片病害数据集

1.分为三类 健康的桃子叶片 &#xff0c;251张 桃疮痂病一般&#xff0c;857张 桃疮痂病严重&#xff0c;770 张 数据集链接 import os import jsonimport torch from PIL import Image from torchvision import transforms import tkinter as tk from tkinter import file…

MySQL 日志管理

目录 一、四种日志介绍 1.1 错误日志 1.2 通用查询日志 1.3 二进制日志 1.4 慢查询日志 三、查询日志是否已开启 四、分割二进制日志 MySQL的日志默认保存在数据库文件的存储目录&#xff08;一般为/usr/local/mysql/data/&#xff09;。也可以修改配置文件&#xff0c;…

低代码可视化开发,是时候去学一学了!

低代码一词&#xff0c;有人认为它是第四代编程语言&#xff0c;有人认为它是开发模式的颠覆&#xff0c;也有人认为它是企业管理模式的变革……有很多声音&#xff0c;社区讨论很热烈。 即使这样&#xff0c;至今也有不少人还不知道这项技术&#xff0c;今天笼统的介绍一下低代…

认识需求不得不思考的5大因素

需求对项目非常重要&#xff0c;如果对需求认识不清晰不明确&#xff0c;往往会导致需求不完整&#xff0c;需求重复等问题&#xff0c;引起很多不必要的风险&#xff0c;因此如何认识需求&#xff0c;需要思考哪些因素&#xff0c;就显得尤为重要。以下5大因素&#xff0c;是我…