【重学 MySQL】六十四、主键约束的使用

news2024/11/27 0:43:39

【重学 MySQL】六十四、主键约束的使用

  • 主键约束的特性
  • 主键约束的创建
    • 创建单列主键
    • 创建联合主键
    • 在表创建后添加主键
  • 主键约束的删除
  • 主键约束的特点
  • 主键约束与自增长约束
  • 注意事项

在这里插入图片描述
在MySQL中,主键约束(PRIMARY KEY)用于唯一标识表中的每一行数据。

主键约束的特性

  1. 唯一性:主键约束列的值必须是唯一的,不能有重复的值。
  2. 非空性:主键约束列的值不能为空(NULL)。
  3. 自动索引:当创建主键约束时,系统默认会在所在的列或列组合上建立对应的唯一索引,从而加快数据检索速度。

主键约束的创建

创建单列主键

单列主键是指主键约束只作用于一个列。创建单列主键有两种方式:

  • 在定义字段的同时指定主键
CREATE TABLE table_name (
    id INT PRIMARY KEY,
    column1 VARCHAR(50),
    column2 INT
);

在这个例子中,id列被指定为主键列。

  • 在定义字段之后再指定主键
CREATE TABLE table_name (
    id INT,
    column1 VARCHAR(50),
    column2 INT,
    PRIMARY KEY (id)
);

这种方式也是将id列指定为主键列,但主键约束的声明放在了字段定义之后。

创建联合主键

联合主键是指主键约束作用于多个列的组合。创建联合主键的语法如下:

CREATE TABLE table_name (
    column1 INT,
    column2 INT,
    -- 其他字段定义
    PRIMARY KEY (column1, column2)
);

在这个例子中,column1column2两列被组合为复合主键。需要注意的是,一张表只能有一个主键,无论是单列主键还是联合主键。

在表创建后添加主键

如果表已经创建但还没有主键,可以通过ALTER TABLE语句来添加主键。语法如下:

ALTER TABLE table_name ADD PRIMARY KEY (column_list);

其中,column_list是主键约束要作用的列名列表。如果是联合主键,则列出所有要组合的列名。

主键约束的删除

如果不再需要主键约束,可以通过ALTER TABLE语句来删除它。语法如下:

ALTER TABLE table_name DROP PRIMARY KEY;

无论是单列主键还是联合主键,都可以使用这条语句来删除主键约束。

主键约束的特点

  • 主键约束相当于唯一约束+非空约束的组合,主键约束列不允许重复,也不允许出现空值。
  • 一个表最多只能有一个主键约束,建立主键约束可以在列级别创建,也可以在表级别上创建。
  • 主键约束对应着表中的一列或者多列(复合主键)
  • 如果是多列组合的复合主键约束,那么这些列都不允许为空值,并且组合的值不允许重复。
  • MySQL的主键名总是PRIMARY,就算自己命名了主键约束名也没用。
  • 当创建主键约束时,系统默认会在所在的列或列组合上建立对应的主键索引(能够根据主键查询的,就根据主键查询,效率更高)。如果删除主键约束了,主键约束对应的索引就自动删除了。
  • 需要注意的一点是,不要修改主键字段的值。因为主键是数据记录的唯一标识,如果修改了主键的值,就有可能会破坏数据的完整性。

主键约束与自增长约束

在MySQL中,主键约束通常与自增长约束(AUTO_INCREMENT)一起使用。自增长约束用于在插入新记录时自动生成一个唯一的值(通常是整数),这个值会自动填充到主键列中。这样,就不需要手动为每条记录指定主键值了。

需要注意的是,自增长约束的字段必须是主键或主键的一部分,并且该字段的数据类型必须是整数类型(如TINYINT、SMALLINT、INT、BIGINT等)。

注意事项

  1. 唯一性检查:在插入或更新数据时,MySQL会检查主键约束列的值是否唯一。如果发现有重复的值,则会报错并拒绝插入或更新操作。
  2. 非空性检查:在插入数据时,MySQL会检查主键约束列的值是否为空。如果为空,则会报错并拒绝插入操作。
  3. 性能考虑:由于主键约束会创建唯一索引,因此在查询数据时可以利用这个索引来加快检索速度。但是,过多的索引也会影响插入、更新和删除操作的性能。因此,在设计表结构时需要权衡利弊。

总之,主键约束是MySQL中非常重要的一种约束类型,它保证了表中数据的唯一性和完整性。在创建表时,应该根据实际需求合理地选择主键列并添加主键约束。

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

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

相关文章

AOT漫谈专题(第一篇): 如何调试C# AOT程序

一:背景 1. 讲故事 上个月接到了二个C# AOT程序的故障分析,发现如今的C# AOT程序也开始在各个领域开枝散叶了,这是一件非常好的事情,本着对这类程序有一个专业的维修态度,开一个系列好好聊一聊吧,当然我这…

互动式教育技术:Spring Boot师生共评作业管理系统

3系统分析 3.1可行性分析 通过对本师生共评的作业管理系统实行的目的初步调查和分析,提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本师生共评的作业管理系统采用JAVA作为开发语言&…

uniapp引入ThorUI的方法

1、下载文件 2、复制相应的文件除了pages 3、往项目中复制即可 4、引入即可实现 5、添加easycome自动引入

SpringBoot2核心功能-web开发

目录 一、简单功能分析1.1、静态资源访问1.2、欢迎页支持、自定义 Favicon 二、请求参数处理2.1、请求映射2.1.1、rest使用与原理2.1.2、请求映射原理 2.2、普通参数与基本注解2.2.1、注解2.2.2、Servlet API:2.2.3、复杂参数: 三、拦截器四、Web原生组件…

STM32之CAN外设

相信大家在学习STM32系列的单片机时,在翻阅芯片的数据手册时,都会看到这么一个寄存器外设——CAN外设寄存器。那么,大家知道这个外设的工作原理以及该如何使用吗?这节的内容将会详细介绍STM32上的CAN外设,文章结尾附有…

气象数据三维可视化的实现原理及代码

气象数据三维可视化是一种使用三维图形技术来呈现和分析气象数据的方法。通过三维可视化,用户可以更直观地观察气象数据的空间分布、变化趋势以及天气现象的复杂结构。这种技术广泛应用于气象预报、科学研究以及环境监测等领域。 本文将介绍气象数据三维可视化的基…

未来战争中的指控体系不仅是分布式的

指控体系,作为军事指挥与控制的重要组成部分,经历了从传统的集权指挥向现代分布式指挥的转变。历史上,战争指挥体系主要依赖于集中式指挥官的决策,信息流动缓慢,决策过程受到地理位置、通信手段等多种因素的制约。随着…

数据库实例

例3.5建立一个“学生”表student create table student(sno char(9) primary key,sname char(20) unique,ssex char(2),sage smallint,sdept char(20)); 例3.6建立一个“课程”表course create table course(cno char(4) primary key,cname char(40) not null,cpno char(4),…

保姆级教程 | VMD输出局部结构及利用TkConsole实现旋转

背景 由于课题需要,现需要展示lammps模拟轨迹中的局部结构(主要是想可视化这里的结果:保姆级教程 | 输出分子动力学轨迹文件输出特定原子范围内的化学环境),因为ovito效果有点笨笨的,所以我这里选用VMD软件为例进行操作,效果图(超级好看夸夸): (说明:主要的分子构…

计算机毕业设计 | SSM 旅游网站后台管理系统(附源码)

1,概述 1.1 背景分析 随着人们生活水平的提高和对休闲旅游的日益重视,旅游业已成为全球最大的经济产业之一。越来越多的人选择通过在线方式进行旅行预订,这种趋势为旅游网站提供了巨大的商机。用户体验是决定旅游网站成功与否的关键因素。良…

vue代码中关于字符串对比的实现

常见的数据比较都只限制于数字比较的比较,但是现在遇到一个框架他会自动将所有传输过来的值转化为字符串形式,导致在比较的时候无法进入到表单校验的代码中去 1.使用Number函数 2.使用 号运算符,都可以实现

python networkx 计算路径A*

import matplotlib.pyplot as plt # 导入 Matplotlib 工具包 import networkx as nx # 导入 NetworkX 工具包 from typing import List# 初始化空的无向图 graph nx.Graph() # 向图中添加多条赋权边: (node1,node2,weight) graph.add_weighted_edges_from([(1, 2, 50),(1, 3…

智能扭矩系统在制造领域应用_SunTorque

【大家好,我是唐Sun,唐Sun的唐,唐Sun的Sun。一站式数智工厂解决方案服务商】 在当今高度自动化和智能化的制造领域,各种先进技术不断涌现,为提高生产效率、保证产品质量和降低成本提供了有力支持。智能扭矩系统作为其中…

【电子电力】基于DSP28335+DSP28035的三相三电平大功率并网逆变器程序代码

摘要 本文介绍了基于DSP28335和DSP28035的三相三电平大功率并网逆变器设计和实现。通过DSP控制器对三电平逆变器的精确控制,实现了逆变器与电网的并网控制,保证了系统的高效稳定运行。该设计主要应用于光伏发电和风力发电系统中的并网发电部分。本文通过…

在AI大模型时代遨游,你不得不知道的一些事

用户到底为什么而买单/产品和研发要抛弃的历史包袱 在大模型时代之前,其实企业和企业之间的软件产品壁垒来自两个地方: 交互,让用户用起来感觉舒服。打磨,我花了五年修复了用户遇到的一万个bug,所以我的产品比你好。 但是无论如何…

如何使用flutter doctor命令检测环境是否配置成功

Flutter Windows Android环境搭建 真机调试学习地址: 17 Flutter介绍-Flutter Windows Android环境搭建 真机调试 如何使用flutter doctor命令检测环境是否配置成功,详细步骤如下: 第一次执行可能会提示下面错误: 1、错误一&am…

建站:腾讯云+宝塔linux+xftp

1.首先,控制台,服务器 2.服务器-网络与域名-ip地址,能看到公网地址 3.宝塔Linux面板-网站-添加站点 4.填写域名会自动生成 ftp 帐号密码 域名可以加上端口,端口号可以写大点 5.xftp新建会话 主机地址:腾讯云拿到的公…

直流有刷电机驱动芯片:【TOSHIBA:TB6612】

Toshiba TB6612是是东芝半导体的一款驱动电机的IC。一个TB6612FNG可以驱动两个电机,每一个驱动都有两个逻辑输入引脚,一个输出引脚和一个PWM引脚。可以通过给两个逻辑输入引脚不同的电平来控制电机的运行状态,通过PWM输入引脚实现电机调速。 …

怎么看待数字化转型是大势所趋?

怎么看到数字化转型是大势所趋?下面我结合最新数据给大家讲明白这个事。 近日,我通过大量的数据相关性分析,有了一些关键发现。 【数字化转型】之所以势在必行,主要是因为数字化转型为各个国家数字经济发展提供了重要的参考依据。…

R2:RNN-心脏病预测

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 一、实验目的: 本地读取并加载数据。了解循环神经网络(RNN)的构建过程测试集accuracy到达87% 拔高:测试集accur…