主键、外键和索引的区别

数据库中主键、外键和索引有什么区别?

1.主键

主键是一种唯一标识表中每一条记录的约束条件。一个表只能定义一个主键,且主键不能为NULL。它用来保证表中记录的唯一性,也可以用来快速查找和定位记录。

主键的特点:

  • 主键必须唯一,不允许重复;
  • 主键值不能为空,不能设置为NULL;
  • 一个表只能有一个主键,可以由一个字段或多个字段组成(复合主键)

定义主键:

  • 创建表时定义主键:create table table_name(

    id int primary key,

    name varchar(20)

    )

  • 在修改表时添加主键:alter table table_name add primary key(id);

2.外键

外键是一种参照其他表的键,它限制了一个表中某个字段的取值必须是另一个表中某一个字段的取值。外键可以用来建立两个表之间的关联,从而实现数据的一致性。

外键的特点如下:

  • 表示与另一张表的关联关系
  • 用于保持数据的一致性
  • 可以有重复值,也可以为空

定义外键:

  • 创建表时定义外键:create table table_name(

    id int,

    name varchar(20),

    department_id int,

    foreign key (department_id) references department(id)

    )

3.索引

索引是一种增加查询效率的数据结构,它是在数据表上建立的。索引可以快速定位表中的数据行,提高查询速度和排序速度。常用的索引类型包括B-Tree索引、Hash索引和全文索引。

索引的特点如下:

  • 用于提高查询效率
  • 可以唯一或非唯一
  • 索引会占用磁盘空间,建议只对频繁搜索或排序的列创建索引
  • 索引会影响数据的插入、更新和删除速度

索引的定义

  • 创建表时定义索引:create table table_name(

    id int,

    name varchar(20),

    index index_name(id)

    );

  • 修改表添加索引:alter table table_name add index index_name(id);

比较:

主键和外键:

  • 主键用于保证表中记录的唯一性,而外键用于建立两个表之间的关联关系,实现数据的一致性;
  • 主键必须为唯一且不能为空,而外键可以重复或为空
  • 主键只能定义一个,而一个表可以有多个外键。

索引:

  • 表示对某个字段或字段组的值进行排序的快速查询方式
  • 具有快速检索和排序的作用
  • 索引会占用磁盘空间,建议只对频繁搜索或排序的列创建,否则会降低更新、插入和删除数据的性能;
  • B-Tree索引支持高效的范围查找,Hash索引只支持等值查找;
  • 全文索引可以对文本内容进行搜索

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

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

相关文章

【车辆车型识别】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+算法模型

一、介绍 车辆车型识别,使用Python作为主要编程语言,通过收集多种车辆车型图像数据集,然后基于TensorFlow搭建卷积网络算法模型,并对数据集进行训练,最后得到一个识别精度较高的模型文件。再基于Django搭建web网页端操…

Windows基础之病毒编写

声明:学习视频来自b站up主 泷羽sec,如涉及侵权马上删除文章 声明:本文主要用作技术分享,所有内容仅供参考。任何使用或依赖于本文信息所造成的法律后果均与本人无关。请读者自行判断风险,并遵循相关法律法规。 感谢泷…

基于SSM+小程序的宿舍管理系统(宿舍1)

👉文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1、项目介绍 本宿舍管理系统小程序有管理员和学生两个角色。 1、管理员功能有个人中心,公告信息管理,班级管理,学生管理,宿舍信息管理,宿舍…

时间序列预测(十七)——滑动窗口的使用

这里只是对滑动窗口在时间序列预测中使用做一个分析总结,关于滑动窗口的详细介绍可以参考其他博文。 滑动窗口是一种常用的技术,它通过使用固定大小的窗口来创建训练样本,以便捕捉时间序列中的模式。适用于多种时间序列模型,包括…

git远程和本地创建分支并关联

1.github创建dev分支 点击branches: 创建一个新分支,可以命名为dev 在vscode创建新分支dev 如果远程dev分支在这没有表现出来 在终端执行:git fetch --all 然后手动切换(签出/checkout)到dev分支,使用如下命令让…

病床呼叫器设计仿真与实物制作

某医院有编号为1~9号的9个病房,现利用数字电路,设计并制作病房呼叫系统,要求系统功能如下: (1)病房 ①呼叫功能:每个病房都装有1个呼叫按钮,在病人需要时,可以通过呼叫…

基于Linux中Qt开发的广告机

一、实训目的 1. 掌握Qt开发环境:通过学习和实践,学习如何搭建Qt开发环境,熟悉Qt的基本使用方法,掌握Qt的应用技术; 2. 界面设计与框架:了解Qt的界面布局、整体设计思路以及框架解析,学会构建一…

设计一个灵活的RPC架构

RPC架构 RPC本质上就是一个远程调用,需要通过网络来传输数据。传输协议可以有多种选择,但考虑到可靠性,一般默认采用TCP协议。为了屏蔽网络传输的复杂性,需要封装一个单独的数据传输模块用来收发二进制数据,这个单独模…

Leetcode 64. 最小路径和 动态规划+空间优化

原题链接&#xff1a;Leetcode 64. 最小路径和 二维数据 class Solution { public:int minPathSum(vector<vector<int>>& grid) {int m grid.size();int n grid[0].size();int dp[m][n];dp[0][0] grid[0][0];for (int j 1; j < n; j)dp[0][j] dp[0][…

qt QMenu详解

1、概述 QMenu是Qt框架中的一个类&#xff0c;用于创建和管理菜单。它提供了丰富的接口来添加菜单项&#xff08;通常是QAction对象&#xff09;、子菜单以及分隔符。QMenu可以嵌入到菜单栏&#xff08;QMenuBar&#xff09;中&#xff0c;也可以作为弹出菜单&#xff08;通过…

Android——Activity生命周期

Activity生命周期 onCreate&#xff1a;创建活动。把页面布局加载进内存&#xff0c;君如了初始状态。onStart&#xff1a;开始活动。把活动页面显示在屏幕上&#xff0c;进入了就绪状态。onResume&#xff1a;恢复活动。活动页面进入活跃状态&#xff0c;能够与用户正常交互&…

02- 模块化编程-004 DB18B20温度数码显示

1、DB18B20采样与显示电路 2、DB18B20简介 DS18B20是一款高精度的单总线数字温度传感器&#xff0c;适用于多种温度测量场合。 温度范围&#xff1a;-55℃至125℃精度&#xff1a;可编程设定9至12位分辨率&#xff0c;对应温度分辨率0.5℃、0.25℃、0.125℃、0.0625℃通信&am…

[241102] Fedora Linux 41 正式发布 | Wasmer 5.0 发布

目录 Fedora Linux 41 正式发布Wasmer 5.0 发布 Fedora Linux 41 正式发布 主要更新&#xff1a; DNF 5: 更快、更小、依赖更少&#xff0c;统一了容器、服务器、桌面和设备的包管理体验。桌面更新&#xff1a; Fedora Workstation 41 基于 GNOME 47&#xff0c;默认终端改为…

C++继承

文章目录 一、继承的概念和定义1、继承的概念2、继承的定义3、继承基类成员访问方式的变化 二、基类和派生类之间的转换三、继承中的作用域1、隐藏规则 四、派生类的默认成员函数1、常见默认成员函数2、实现一个不能被继承的类 五、继承与友元六、继承与静态成员变量七、多继承…

嵌入式linux系统中串口驱动框架分析

大家好,今天主要给大家分享一下,如何使用linux系统中的串口实现。 第一:串口基本简介 串口是很常见的一个外设,在Linux下通常通过串口和其他设备或传感器进行通信。根据电平的不同,串口可以分为TTL和RS232。不管是什么样的电平接口,驱动程序是一样的。 第二:Linux下UAR…

秋日盛景,北京马拉松万人齐跑,秀域人工智能理疗获好评无数

在金秋送爽的北京&#xff0c;一场全民瞩目的体育盛事——北京马拉松顺利开跑&#xff0c;再次点燃了这座城市的运动激情。各地跑者齐聚双奥之城&#xff0c;共同奔赴在秋日美景之中。      回首往昔&#xff0c;1981年9月27日&#xff0c;首届北京马拉松赛的举办&#xff…

Java-I/O框架09:InputStreamReader、OutputStreamWriter使用

视频链接&#xff1a;16.24 转换流的使用_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1Tz4y1X7H7?spm_id_from333.788.videopod.episodes&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5&p24 1.InputStreamReader使用 package com.yundait.Demo05;import java…

JavaScript语法基础(JS使用方式, 输出方式, 变量,数据类型,运算符,程序控制语句)

目录 JS概念 一.JS使用方式 &#xff08;1&#xff09;行内式 &#xff08;2&#xff09;内嵌式 &#xff08;3&#xff09;外链式 二.JS输出方式 三.基本语法 1.变量 &#xff08;1&#xff09;变量的命名 &#xff08;2&#xff09;变量的声明 &#xff08;3&#xf…

NPOI 操作详解(操作Excel)

目录 1. 安装 NPOI 2. 使用 NPOI 创建新 Excel 文件 3. 设置列宽和行高 1. 设置列宽 2. 设置行高 3. 同时设置列宽和行高 4. 设置统一的行高 5. 设置统一的列宽 6. 应用统一的行高和列宽 4. 合并单元格 5. 设置单元格样式&#xff08;字体、边框、背景色等&#xf…

codigger体验过程记录

一、codigger的介绍 codigger是一款分布式操作系统&#xff0c;主要是便于进行个人移动化办公、在线协同办公、开发和娱乐的私人应用。 收到codigger开发者朋友的邀请&#xff0c;于是进行了这款产品的升级体验&#xff0c;接下来就简单介绍一下自己的体验过程吧。 二、登录系…