MySQL(8)什么是主键和外键?

主键(Primary Key)和外键(Foreign Key)是关系数据库中用于定义和维护表之间关系的重要概念。以下是详细的解释、示例代码和操作步骤。

主键(Primary Key)

定义

主键是表中的一个或多个字段,其值唯一地标识表中的每一行。主键的主要作用是确保表中的每一行具有唯一性,并且主键列不能包含 NULL 值。

特性
  1. 唯一性:主键中的值必须唯一。
  2. 非空性:主键列不能包含 NULL 值。
  3. 自动索引:在大多数数据库系统中,主键会自动创建一个索引,以提高查询速度。
示例

我们创建一个名为 users 的表,并将 id 列设置为主键:

CREATE TABLE users (id INT AUTO_INCREMENT PRIMARY KEY,username VARCHAR(50) NOT NULL,email VARCHAR(100) NOT NULL,created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

执行示例:

mysql> CREATE TABLE users (id INT AUTO_INCREMENT PRIMARY KEY,username VARCHAR(50) NOT NULL,email VARCHAR(100) NOT NULL,created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
Query OK, 0 rows affected (0.02 sec)

外键(Foreign Key)

定义

外键是一个或多个字段,其值在另一张表的主键或唯一键中存在。外键用于建立和维护两个表之间的关系,确保数据的一致性和完整性。

特性
  1. 引用完整性:外键用于确保引用的行在另一张表中存在。
  2. 级联操作:可以设置级联删除或更新,以确保在父表中修改或删除数据时,子表中的数据同步更新或删除。
示例

假设我们有一个 orders 表,其中 user_id 列是外键,引用 users 表中的 id 列。这表示每个订单都与一个用户相关联。

CREATE TABLE orders (order_id INT AUTO_INCREMENT PRIMARY KEY,order_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,user_id INT,FOREIGN KEY (user_id) REFERENCES users(id)
);

执行示例:

mysql> CREATE TABLE orders (order_id INT AUTO_INCREMENT PRIMARY KEY,order_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,user_id INT,FOREIGN KEY (user_id) REFERENCES users(id)
);
Query OK, 0 rows affected (0.02 sec)

操作示例

以下是一个完整的示例,包括创建数据库、添加主键和外键以及插入数据的过程:

-- 连接到 MySQL 服务器
mysql -u root -p-- 创建数据库
CREATE DATABASE mydatabase;-- 选择数据库
USE mydatabase;-- 创建 users 表并设置主键
CREATE TABLE users (id INT AUTO_INCREMENT PRIMARY KEY,username VARCHAR(50) NOT NULL,email VARCHAR(100) NOT NULL,created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);-- 创建 orders 表并设置外键
CREATE TABLE orders (order_id INT AUTO_INCREMENT PRIMARY KEY,order_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,user_id INT,FOREIGN KEY (user_id) REFERENCES users(id)
);-- 插入数据到 users 表
INSERT INTO users (username, email) VALUES ('alice', 'alice@example.com');
INSERT INTO users (username, email) VALUES ('bob', 'bob@example.com');-- 插入数据到 orders 表
INSERT INTO orders (user_id) VALUES (1);
INSERT INTO orders (user_id) VALUES (2);

使用图形化工具管理主键和外键

使用 MySQL Workbench
  1. 创建主键

    • 打开 MySQL Workbench 并连接到 MySQL 服务器。
    • 在左侧的导航窗格中,右键点击要修改的表(例如 users),选择 “Alter Table…”。
    • 在弹出的窗口中,选择要设置为主键的列(例如 id),勾选 “PK”(Primary Key)复选框,然后点击 “Apply”。
  2. 创建外键

    • 打开 MySQL Workbench 并连接到 MySQL 服务器。
    • 在左侧的导航窗格中,右键点击要修改的表(例如 orders),选择 “Alter Table…”。
    • 在弹出的窗口中,切换到 “Foreign Keys” 选项卡,点击 “Add Foreign Key” 按钮。
    • 设置外键名称,选择引用的表和列(例如 users(id)),然后点击 “Apply”。

总结

主键和外键是关系型数据库中用于确保数据完整性和一致性的重要机制。通过主键,可以唯一标识表中的每一行;通过外键,可以建立和维护表之间的关系。在实际操作中,可以通过 SQL 语句或图形化工具来管理主键和外键。

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

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

相关文章

任意复杂度的 JSON 数据转换为多个结构化的 Pandas DataFrame 表格

以下是一个 完整、结构清晰、可运行的 Python 工具,用于将任意复杂度的 JSON 数据转换为多个结构化的 Pandas DataFrame 表格。该工具支持嵌套对象、嵌套数组,并通过主键和外键建立表之间的关联关系。 if __name__ "__main__":# 示例 JSON 数…

【SSL部署与优化​】​​HTTP/2与HTTPS的协同效应

HTTP/2与HTTPS的协同效应:为何HTTP/2强制要求TLS 1.2? HTTP/2是HTTP协议的现代升级版,旨在通过多路复用、头部压缩等技术提升性能。然而,HTTP/2的设计与部署与HTTPS(TLS加密)紧密相关,甚至强制…

爬虫请求频率应控制在多少合适?

爬虫请求频率的控制是一个非常重要的问题,它不仅关系到爬虫的效率,还涉及到对目标网站服务器的影响以及避免被封禁的风险。合理的请求频率需要根据多个因素来综合考虑,以下是一些具体的指导原则和建议: 一、目标网站的政策 查看网…

使用Visual Studio将C#程序发布为.exe文件

说明 .exe 是可执行文件(Executable File)的扩展名。这类文件包含计算机可以直接运行的机器代码指令,通常由编程语言(如 C、C、C#、Python 等)编译或打包生成。可以用于执行自动化操作(执行脚本或批处理操…

分布式1(cap base理论 锁 事务 幂等性 rpc)

目录 分布式系统介绍 一、定义与概念 二、分布式系统的特点 三、分布式系统面临的挑战 四、分布式系统的常见应用场景 CAP 定理 BASE 理论 BASE理论是如何保证最终一致性的 分布式锁的常见使用场景有哪些? 1. 防止多节点重复操作 2. 资源互斥访问 3. 分…

常见相机焦段的分类及其应用

相机焦段是指镜头的焦距范围,决定了拍摄时的视角、画面范围和透视效果。不同焦段适合不同的拍摄场景和主题,以下是常见焦段的分类及其应用: 一、焦段的核心概念 焦距:镜头光学中心到成像传感器的距离(单位&#xff1a…

H5S 视频监控AWS S3 对象存储

本文介绍一下如何使用S3对象存储作为H5S 存储空间进行录像存储 然后创建一个对象存储,本文以minio 为例(实际项目亲测天翼云): 首先安装 s3fs 如果是redhat系列,使用如下命令 sudo yum install epel-release sudo yum install s3fs-fuse …

算法第十八天|530. 二叉搜索树的最小绝对差、501.二叉搜索树中的众数、236. 二叉树的最近公共祖先

530. 二叉搜索树的最小绝对差 题目 思路与解法 第一想法: 一个二叉搜索树的最小绝对差,从根结点看,它的结点与它的最小差值一定出现在 左子树的最右结点(左子树最大值)和右子树的最左结点(右子树的最小值…

Nginx 动静分离在 ZKmall 开源商城静态资源管理中的深度优化

在 B2C 电商高并发场景下,静态资源(图片、CSS、JavaScript 等)的高效管理直接影响页面加载速度与用户体验。ZKmall开源商城通过对 Nginx 动静分离技术的深度优化,将静态资源响应速度提升 65%,带宽成本降低 40%&#xf…

PostgREST:无需后端 快速构建RESTful API服务

在现代 Web 开发中,API 已成为连接前后端的核心桥梁,传统的做法是通过后端框架来构建API接口,然后由前后端人员进行联调。 PostgREST是基于无服务器的一种实现方案,允许开发者将PostgreSQL数据库直接暴露为RESTful API&#xff0…

MySQL——九、锁

分类 全局锁表级锁行级锁 全局锁 做全库的逻辑备份 flush tables with read lock; unlock tables;在InnoDB引擎中,我们可以在备份时加上参数–single-transaction参数来完成不加锁的一致性数据备份 mysqldump --single-transaction -uroot -p123456 itcast>…

基于 Kubernetes 部署容器平台kubesphere

一 前言: k8s 大家都已经非常熟悉了,网上流传着非常多的搭建部署文档,有kubeadmin的有二进制的,还有基于第三方的部署工具的,反正是各种部署方法都有,k8s部署技术热门可见一斑。但是不管哪种部署都需要了解…

RDD算子-行为算子

RDD 算子探秘:行为算子的深度解析与实战应用​ 在 Spark 的 RDD 编程模型中,转换算子负责构建数据处理的逻辑流程,但真正触发计算并产生最终结果的是行为算子(Action Operators)。与转换算子的惰性求值特性不同&#…

Oracle — PL-SQL

介绍 Oracle PL/SQL是专为Oracle数据库设计的过程化编程语言,深度融合SQL语句与结构化编程逻辑,旨在高效处理复杂数据操作与业务规则。其核心特征为“块结构”,程序由声明、执行、异常处理三部分组成,支持模块化开发,显…

高防ip支持哪些网络协议

高防IP通常支持多种网络协议,以提供全面的网络安全防护。以下是一些主要支持的网络协议及其相关说明: TCP协议(传输控制协议): TCP协议是最常见的传输协议,广泛应用于互联网通信。高防IP通过对TCP协议的防…

Flutter基础()

导航栏 appBar: AppBar() title: const Text(搜索) //标题 backgroundColor: Colors.blue //背景颜色 centerTitle: true //标题居中leading 属性 作用: 放置在应用栏左侧的控件,通常是一个图标按钮,用于导航或打开菜单。 AppBar(le…

ESP系列单片机选择指南:结合实际场景的最优选择方案

前言 在物联网(IoT)快速发展的今天,ESP系列单片机凭借其优异的无线连接能力和丰富的功能特性,已成为智能家居、智慧农业、工业自动化等领域的首选方案。本文将深入分析各款ESP芯片的特点,结合典型应用场景,帮助开发者做出最优选择…

搭建Caffeine+Redis多级缓存机制

本地缓存的简单实现方案有HashMap,CucurrentHashMap,成熟的本地缓存方案有Guava 与 Caffeine ,企业级应用推荐下面说下两者的区别 1. 核心异同对比 特性Guava CacheCaffeine诞生背景Google Guava 库的一部分(2011年)…

【Linux系统】第四节—详解yum+vim

hello 我是云边有个稻草人 Linux—本节课所属专栏—欢迎订阅—持续更新中~ 目录 画板—本节课知识点详解 一、软件包管理器 1.1 什么是软件包 1.2 Linux软件⽣态 1.3 yum具体操作 【查看软件包】 【安装软件】 【卸载软件】 【注意事项】 1.4 安装源 二、vim 2.1 …

EasyRTC嵌入式音视频通信SDK打造带屏IPC全场景实时通信解决方案

一、方案概述​ 在智能安防与物联网快速发展的背景下,带屏IPC(网络摄像机)不仅承担着视频采集与监控的基础功能,还逐渐向多样化交互与智能化方向演进。EasyRTC作为一款强大的实时通信框架,具备低延迟、高稳定性、跨平…