mysql主键和外键的区别

mysql主键和外键的区别

一、主键与外键存在的意义

主键和外键在关系数据库中扮演着至关重要的角色,它们共同维护着数据的完整性和一致性。

主键:它是每条记录的唯一标识符,犹如人的身份证号码,具有唯一性和非空性。例如,在一个包含身份证号、姓名、年龄等字段的记录中,由于身份证号是唯一的,因此它可以作为主键。主键的存在确保了每条记录的唯一性,防止了重复数据的出现

外键:它是连接不同数据表之间关系的纽带,通过引用另一张表的主键或其他唯一性索引,来保持数据的一致性和完整性。以A表和B表为例,如果A表中的某个字段是B表的主键,那么这个字段在A表中就充当了外键的角色。外键允许重复值也可以为空,这取决于具体的应用场景和需求。

索引:它是一种特殊的数据结构,用于加速数据库的查询速度。索引字段的值是唯一的,但允许存在空值。通过创建索引,可以显著提高查询性能,优化数据库的使用体验。

二、主键、外键与索引的差异性

这三者在数据库中的作用和特性各具特色:

主键:主要用于标识表中的唯一记录,确保数据的完整性和准确性。每个表只能有一个主键,它代表了表中每条记录的唯一性。

外键:主要用于建立表与表之间的关联关系,维护数据的一致性和完整性。一个表可以有多个外键,这取决于该表与其他表之间的关联程度。外键的引入使得数据表之间的关系更加紧密,有利于实现数据的跨表查询和操作。

索引:主要用于提高查询速度,优化数据库性能。通过创建索引,可以加速对表中特定字段的查询操作。一个表可以有多个索引,每个索引都针对不同的字段,以满足不同的查询需求。虽然索引字段的值必须是唯一的,但允许存在空值,这在实际应用中具有一定的灵活性。

总结

作用:
主键:用来保证数据完整性
外键:用来和其他表建立联系的
索引:是提高查询排序的速度个数
主键:主键一个表只有一个
外键:一个表可以有多个外键
索引:一个表可以有多个唯一索引

外键必须是另一个表的主键吗 ?

不一定是主键,但必须是唯一性索引。
主键约束和唯一性约束都是唯一性索引
外键是表间关系的参照,可以不是主键。只是表明两个表之间的关系是通过那个属性连接起来的。

下面是个例子;
在这里插入图片描述

外键关联方式:foreign key

进货表命令

create table 进货表(序号 tinyint(4) unsigned not null primary key auto_increment, 销售日期 date,客户名称 varchar(30),货号 char(4),单价 decimal(8,2),  数量 int(4),销售员ID char(6),foreign key(货号) references 商品一览表(货号),foreign key(销售员ID) references 员工表(员工ID) );

员工表命令

 create table 员工表(员工ID char(6) primary key not null,姓名 varchar(8) not null,性别 char(1) not null,出生日期 date not null,部门 varchar(20) not null,工作时间 date not null,个人简历 varchar(200) null);

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

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

相关文章

Linux基础命令[15]-less

文章目录 1. less 命令说明2. less 命令语法3. less 命令示例3.1 不加参数3.2 -N(显示行号)3.3 打开多个文件3.4 标记导航3.5 搜索内容 4. 总结 1. less 命令说明 less:用来分页查看文件,与 more 相比更加的灵活,并且…

算法之二分查找算法

二分查找算法简介 1. 首先说明二分查找算法是比较恶心, 细节很多, 很容易写出死循环的算法, 但熟悉了之后是最简单的算法. 2. 其次我们可能听说过二分查找的前提是数组有序的前提下进行, 但其实不一定. 3. 二分查找算法有一套模板: 朴素的二分模板: 比较简单, 但是有局限性查找…

Kubernetes安装

Kubernetes安装 二进制安装 暂无 Kubeadm安装 kubeadm是官方社区推出的一个用于快速部署kubernetes集群的工具。这个工具能通过两条指令完成一个kubernetes集群的部署 # 创建一个 Master 节点 kubeadm init# 将一个 Node 节点加入到当前集群中 kubeadm join <Master节点…

docker——启动各种服务

1.Mysql 2.Redis 3.nginx 4.ES 注意&#xff1a;ES7之后环境为 -e ELASTICSEARCH_HOSTS http://ip地址:9200

【libwebrtc】基于m114的构建

libwebrtc A C++ wrapper for binary release, mainly used for flutter-webrtc desktop (windows, linux, embedded).是 基于m114版本的webrtc 最新(20240309 ) 的是m122了。官方给出的构建过程 .gclient 文件 solutions = [{"name" : src,"url

代码随想录day33 Java版

96.不同的二叉搜索树 递推公式不好想&#xff0c;在根节点的左右组装&#xff0c;从dp[0]*dp[n-1]到dp[n-1]*dp[0]累加 class Solution {public int numTrees(int n) {//初始化 dp 数组int[] dp new int[n 1];//初始化0个节点和1个节点的情况dp[0] 1;dp[1] 1;for (int i …

用信号的方式回收僵尸进程

当子进程退出后&#xff0c;会给父进程发送一个17号SIGCHLD信号&#xff0c;父进程接收到17号信号后&#xff0c;进入信号处理函数调用waitpid函数回收僵尸进程若多个子进程同时退出后&#xff0c;这是切回到父进程&#xff0c;此时父进程只会处理一个17号信号&#xff0c;其他…

植物病害识别:YOLO水稻病害识别/分类数据集(2000多张,2个类别,yolo标注)

YOLO水稻病害识别/分类数据集&#xff0c;包含疾病和正常2类&#xff0c;共2000多张图像&#xff0c;yolo标注完整&#xff0c;可直接训练。 适用于CV项目&#xff0c;毕设&#xff0c;科研&#xff0c;实验等 需要此数据集或其他任何数据集请私信

解决input事件监听拼音输入法导致高频事件

1、业务场景 在文本框中输入内容&#xff0c;执行查询接口&#xff0c;但遇到一个问题&#xff0c;当用拼音打字写汉字去搜索的时候&#xff0c;会输入一些字母拼成汉字&#xff0c;怎么能监听等拼音文字输入完成后再触发文本框监听事件 2、解决方案 通过查阅资料得知在输入中…

算法学习11:树与图的 DFS、BFS

算法学习11&#xff1a;树与图的 DFS、BFS 文章目录 算法学习11&#xff1a;树与图的 DFS、BFS前言一、树与图的深度优先遍历1.例题&#xff1a;树的重心&#xff1a; 二、树与图的宽度优先遍历1.例题&#xff1a;图中点的层次&#xff1a; 三、拓扑排序&#xff1a;&#xff0…

vue.js 页面中设置多个swiper

效果&#xff1a; 设置主要设置了 动态的 包含类、 左右按钮的类 <template><div class"swiper-container_other"><!-- 右侧按钮 --><div :class"[(id)?swiper-button-nextid:swiper-button-next, swiper-button-next]"></div…

浅易理解:卷积神经网络(CNN)

浅易理解卷积神经网络流程 本文的目录&#xff1a; 1 什么卷积神经网络 2 输入层 3 卷积层 4 池化层 5 全连接层 1 什么是卷积神经网络 1.1卷积神经网络&#xff08;Convolutional Neural Networks, CNN&#xff09; 是一种前馈神经网络&#xff0c;它的人工神经元可以响应一…

golang中new和make的区别

1. 先看一个例子 package mainimport "fmt"func main() {var a *int*a 10fmt.Println(*a) }运行结果是啥呢&#xff1f; 问&#xff1a;为什么会报这个panic呢&#xff1f; 答&#xff1a;因为如果是一个引用类型&#xff0c;我们不仅要声明它&#xff0c;还要为…

Linux命令-权限管控

Linux命令-权限管控 目录 Linux命令-权限管控rootsu&#xff08;switch user&#xff09;sudo用户、用户组查看权限管控信息修改权限控制chmodchown 对于Linux中权限的讲解以及对权限的一些操作 root 超级管理员&#xff0c;拥有最大系统操作权限普通用户一般在其HOME目录内是…

Leetcode 675 为高尔夫比赛砍树

文章目录 1. 题目描述2. 我的尝试3. 题解1. BFS 1. 题目描述 Leetcode 675 为高尔夫比赛砍树 2. 我的尝试 typedef priority_queue<int, vector<int>, greater<int>> heap;class Solution { public:int m;int n;int bfs(vector<vector<int>>&…

mysql使用命令给指定用户配置表权限

记录使用命令为用户配置表权限&#xff0c;可用于使用Navicat工具配置权限报错场景下使用&#xff1a; 首先进如部署MYSQL的服务器&#xff0c;然后开始按照以下步骤操作 1、登录mysql程序&#xff1a; 命令&#xff1a;mysql -u wl-prod -p 密码&#xff1a;root 2、切换数…

写一个去除数组中重复元素的函数

1.使用ES6的Set数据结构 Set是一种只存储唯一值的数据结构&#xff0c;因此任何重复的元素都会被自动忽略。然后&#xff0c;我们使用扩展运算符…将Set对象转换回数组&#xff0c;并返回这个新的数组。 请注意&#xff0c;这种方法会改变原始数组中元素的顺序&#xff0c;因…

2024中国(京津冀)太阳能光伏推进大会暨展览会

2024年中国(京津冀)太阳能光伏推进大会暨展览会是一个旨在促进太阳能光伏产业发展的重要会议和展览会。该活动将在中国的京津冀地区举行&#xff0c;旨在汇聚全球太阳能光伏领域的专业人士、政府代表、企业家和科研人员&#xff0c;共同探讨太阳能光伏技术的最新进展和未来发展…

数据集成工具 ---- datax 3.0

1、datax: 是一个异构数据源离线同步工具&#xff0c;致力于实现关系型数据库&#xff08;mysql、oracle等&#xff09;hdfs、hive、hbase等各种异构数据源之间的数据同步 2、参考网址文献&#xff1a; https://github.com/alibaba/DataX/blob/master/introduction.md 3、Da…

避抗指南:如何寻找OLED透明屏供应商

寻找OLED透明屏供应商&#xff0c;你可以按照以下步骤进行&#xff1a; 明确需求&#xff1a;首先&#xff0c;你需要明确自己的需求&#xff0c;包括所需OLED透明屏的尺寸、分辨率、亮度、色彩饱和度等具体参数&#xff0c;以及预算和采购量。这有助于你更精准地找到符合需求的…