MySQL外键约束(FOREIGN KEY)详解

yizhihongxing

MySQL的外键约束是一种保证数据完整性的机制,它可以强制要求一个列或列组合与另一张表中的数据匹配。外键约束规定了在一个表中某个列的值必须是另一张表中某个列的值。

外键约束的作用

  1. 可以确保数据的完整性,防止插入无效数据;
  2. 在删除或更新主表数据时,自动删除或更新关联的子表数据,便于维护数据一致性;

外键约束使用方法

创建外键约束语法:
CREATE TABLE 子表名 (
子表列1 数据类型,
子表列2 数据类型,
...
FOREIGN KEY (子表列1) REFERENCES 主表名(主表列1)
);

示例:

CREATE TABLE department (
dept_id INT PRIMARY KEY,
dept_name VARCHAR(50) NOT NULL
);

CREATE TABLE employee (
emp_id INT PRIMARY KEY,
emp_name VARCHAR(50) NOT NULL,
salary INT,
dept_id INT,
FOREIGN KEY (dept_id) REFERENCES department(dept_id)
);

这个例子中,employee表中的dept_id列是department表中的主键dept_id的外键。这意味着任何时候,employee表中的dept_id的值必须是department表中dept_id的一个有效值。

示例2:

CREATE TABLE publisher (
publisher_id INT PRIMARY KEY,
publisher_name VARCHAR(50) NOT NULL
);

CREATE TABLE book (
book_id INT PRIMARY KEY,
book_title VARCHAR(50) NOT NULL,
publisher_id INT,
FOREIGN KEY (publisher_id) REFERENCES publisher(publisher_id) ON UPDATE CASCADE ON DELETE SET NULL
);

在这个例子中,book表中的publisher_id列也是publisher表中的主键publisher_id的外键。如果publisher表的publisher_id被更新或删除,book表的对应行也会被更新或删除。如果更新后的外键值对应着一个不存在的记录,则book表对应行的外键值将变为NULL。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:MySQL外键约束(FOREIGN KEY)详解 - Python技术站

(0)
上一篇 2023年3月9日
下一篇 2023年3月9日

相关文章

  • SpringBoot Redis缓存 @Cacheable、@CacheEvict、@CachePut

    文章来源 https://blog.csdn.net/u010588262/article/details/81003493 1. pom.xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-s…

    Redis 2023年4月13日
    00
  • idea中使用mysql的保姆级教程(超详细)

    Idea中使用MySQL的保姆级教程 在Idea中操作MySQL可能是很多新手会遇到的问题。本篇攻略将从如下几个方面介绍Idea中使用MySQL的详细步骤: 安装MySQL 配置JDBC驱动 创建数据库连接 操作数据库 示例说明 1. 安装MySQL 首先需要安装MySQL数据库。可以在MySQL官网下载并按照提示安装。 2. 配置JDBC驱动 Idea需要…

    database 2023年5月18日
    00
  • 面向行的数据库和面向列的数据库之间的区别

    面向行的数据库和面向列的数据库是两种不同的数据库存储结构方式。下面来详细讲解它们之间的区别及其优缺点。 面向行的数据库 在面向行的数据库中,数据按照行方式存储,每一行称为一条记录。每一条记录出现时系统都将其存储为一整个行数据,它包含了多个列的数据。举个例子:如果要描述一本书,我们可以将书的名字、出版社、作者等信息全部保存在一行数据中。 面向行的数据库优点: …

    database 2023年3月27日
    00
  • SQL 识别字符串里的数字字符

    要识别字符串里的数字字符,可以使用SQL中的内置字符串函数,比如REGEXP_SUBSTR()、REGEXP_REPLACE()等。 使用REGEXP_SUBSTR()函数 REGEXP_SUBSTR()函数可以从一个字符串中提取满足正则表达式条件的子串,从而识别字符串中的数字字符。 例如,我们要从字符串”abcd12345efg”中识别数字字符,可以使用以…

    database 2023年3月27日
    00
  • linux下通过go语言获得系统进程cpu使用情况的方法

    对于Linux下通过go语言获得系统进程CPU使用情况的方法,我们可以采用以下两种方式: 1. 使用psutil包获取系统进程信息 psutil是Python的第三方库,可提供跨平台的系统进程和系统资源利用率的查询及监视功能,包含CPU,内存,磁盘IO,网络IO,以及系统信息等。利用go的os/exec包可以实现在go程序中调用python的psutil库来…

    database 2023年5月22日
    00
  • 教你一招永久解决mysql插入中文失败问题

    下面是“教你一招永久解决mysql插入中文失败问题”的完整攻略。 问题描述 在使用mysql数据库时,我们常常会遇到将中文数据插入到数据库中失败的问题。这是由于mysql默认编码为latin1,无法直接存储中文编码。如果不进行设置,插入中文数据时会报错。那么如何解决这个问题呢?接下来,我将介绍一种通用的解决方案。 解决方案 步骤一:更改数据库的编码 将mys…

    MySQL 2023年5月18日
    00
  • golang MySQL实现对数据库表存储获取操作示例

    下面是关于”golang MySQL实现对数据库表存储获取操作示例”的详细讲解。 环境准备 要使用Golang与MySQL进行交互,需要安装以下软件:* Golang* MySQL 安装MySQL驱动 在Go中,使用第三方连接MySQL的库,最常使用的是go-sql-driver/mysql,所以需要安装这个驱动。可以在终端中执行如下命令来安装: go ge…

    database 2023年5月22日
    00
  • MySQL获得当前日期时间函数示例详解

    MySQL获得当前日期时间函数示例详解 在MySQL中,我们可以使用多种函数获取当前日期和时间。 NOW() 函数 NOW() 函数返回当前的日期和时间。它的语法如下: NOW(); 例如: SELECT NOW(); 输出: 2022-07-06 17:54:50 CURRENT_TIMESTAMP 函数 CURRENT_TIMESTAMP 函数也可以返回…

    database 2023年5月22日
    00
合作推广
合作推广
分享本页
返回顶部