MySQL的多表操作-外键约束

这篇具有很好参考价值的文章主要介绍了MySQL的多表操作-外键约束。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

外键约束

介绍

MySQL 外键约束(FOREIGN KEY)是表的一个特殊字段,经常与主键约束一起使用。对于两个具有关联关系的表而言,相关联字段中主键所在的表就是主表(父表),外键所在的表就是从表(子表)。

如下图员工表中dept_id 表示员工属于哪个部门,员工表就是从表,部门表就是主表。
MySQL的多表操作-外键约束,MySQL,mysql,数据库,外键约束

特点

定义一个外键时,需要遵守下列规则:

  • 主表必须已经存在于数据库中,或者是当前正在创建的表。

  • 必须为主表定义主键。

  • 主键不能包含空值,但允许在外键中出现空值。也就是说,只要外键的每个非空值出现在指定的主键中,这 个外键的内容就是正确的。

  • 在主表的表名后面指定列名或列名的组合。这个列或列的组合必须是主表的主键或候选键。(就比如联合主键)

  • 外键中列的数目必须和主表的主键中列的数目相同。

  • 外键中列的数据类型必须和主表主键中对应列的数据类型相同。

添加外键约束

方式1:在创建表时设置外键约束
基本语法格式:

[constraint <外键名>] foreign key 字段名 [,字段名2,…] references <主表名> 主键列1 [,主键列2,…]

举例:

create database mydb3;
use mydb3;
create table if not exists dept(
  deptno varchar(20) primary key ,  -- 部门号
  name varchar(20) -- 部门名字
);
# 从表
create table if not exists emp(
  eid varchar(20) primary key , -- 员工编号
  ename varchar(20), -- 员工名字
  age int,  -- 员工年龄
  dept_id varchar(20),  -- 员工所属部门
  constraint emp_fk foreign key (dept_id) references dept (deptno) -- 外键约束
);

方式2 在修改表时添加
外键约束也可以在修改表时添加,但是添加外键约束的前提是:从表中外键列中的数据必须与主表中主键列中的数据一致或者是没有数据。

alter table <数据表名> add constraint <外键名> foreign key(<列名>) references 
<主表名> (<列名>);
-- 创建部门表
create table if not exists dept2(
  deptno varchar(20) primary key ,  -- 部门号
  name varchar(20) -- 部门名字
);
-- 创建员工表
create table if not exists emp2(
  eid varchar(20) primary key , -- 员工编号
  ename varchar(20), -- 员工名字
  age int,  -- 员工年龄
  dept_id varchar(20)  -- 员工所属部门
);
-- 创建外键约束
alter table emp2 add constraint dept_id_fk foreign key(dept_id) references dept2 (deptno);
数据插入
  • 注意必须先给主表添加数据
  • 注意给从表添加数据时,外键列的值不能随便写,必须依赖主表的主键列
    就比如emp 中的员工所属部门不能随便填必须是dept 表里有的。
-- 1、添加主表数据
 -- 注意必须先给主表添加数据
insert into dept values('1001','研发部');
insert into dept values('1002','销售部');
insert into dept values('1003','财务部');
insert into dept values('1004','人事部’);

-- 2、添加从表数据
insert into emp values('1','乔峰',20, '1001');
insert into emp values('2','段誉',21, '1001');
insert into emp values('3','虚竹',23, '1001');
insert into emp values('4','阿紫',18, '1002');
insert into emp values('5','扫地僧',35, '1002');
insert into emp values('6','李秋水',33, '1003');
insert into emp values('7','鸠摩智',50, '1003'); 
insert into emp values('8','天山童姥',60, '1005');  
-- 最后一行不可以,因为主表里面没有 1005

删除数据文章来源地址https://www.toymoban.com/news/detail-724330.html

-- 3、删除数据
 /*
   注意:
       1:主表的数据被从表依赖时,不能删除,否则可以删除
       2: 从表的数据可以随便删除
 */
delete from dept where deptno = '1001'; -- 不可以删除
delete from dept where deptno = '1004'; -- 可以删除
delete from emp where eid = '7'; -- 可以删除

删除外键约束

alter table <表名> drop foreign key <外键约束名>;

alter table emp2 drop foreign key dept_id_fk;

到了这里,关于MySQL的多表操作-外键约束的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【MySQL】外键约束和外键策略

             外键约束 ( FOREIGN KEY ,缩写FK)是用来实现数据库表的参照完整性的。外键约束可以使两张表紧密的结合起来,特别是针对修改或者删除的级联操作时,会保证数据的完整性。         外键是指表中某个字段的值依赖于另一张表中某个字段的值,而 被依赖的

    2024年02月03日
    浏览(50)
  • MySQL - 数据库级别的外键

    测试数据 : 学生表 年级表  学生表的 grade 列引用年级表的 id (外键约数) :  定义外键 key 给这个外键添加约束 (执行引用) references 引用 【注意】     当我们给表添加上外键后, 我们想要删除有外键关系的表的时候, 必须要先删除引用别人的表 (从表), 再删除被引用的表 (主表

    2024年02月11日
    浏览(42)
  • 【⑫MySQL | 约束(二)】外键 | 默认值 | 检查约束 — 综合案例

    ✨欢迎来到小K的MySQL专栏,本节将为大家带来MySQL外键 | 默认值 | 检查约束 以及综合案例的分享 ✨ 6. 外键约束(FOREIGN KEY,FK) 前面介绍的完整性约束都是在单表中进行设置,而外键约束则保证多个表(通常为两个表)之间的参照完整性,即构建于两个表的两个字段之间的参照关

    2024年02月12日
    浏览(38)
  • MySQL:创建数据库,数据表,主键和外键

    目录 前言: 安装MySQL: 打开MySQL: 创建数据库: 查看已建数据库: 查看数据库引擎: 创建数据表:  主键约束: 单字段主键: 多字段联合主键: 外键约束: MySQL数据库安装了很久,一直也没静下心来学习,因为起步太晚,所以什么都想学点,又感觉有些力不从心,目前

    2023年04月27日
    浏览(114)
  • 【MySQL入门指南】外键约束使用详解

     MySQL是一种关系型数据库,现实中的业务往往是相互关联的,这也就决定了数据库中的表也是存在相互关系的。而表与表之间的相互关系就是通过外键来维护的。给大家举一个现实的例子来帮助理解:  现在我们需要在数据库中存放学生的选课信息。如果我们将课程具体信

    2024年02月01日
    浏览(55)
  • MySQL--删除表的外键约束,简单易懂。

    删除表的外键约束 我们曾在第一章中讲过外键的作用,以及如何创建一个表的外键。建立了外键我们就建立起了两张表的关联关系,那如果我想删除主表呢?为了确保数据库的正确性,我们必须先解除两个表之间的关联关系,那就是删除外键约束啦!让我们先来看看删除外键

    2024年04月17日
    浏览(42)
  • 一文彻底搞清楚MySQL的主键、外键、约束和各种索引

    主键用于唯一标识表中每一行数据,外键用于建立表与表之间关联关系,约束用于限制表中数据的规则,索引用于加速查询。 主键是一种用于唯一标识表中每一行数据的标识符。在Mysql中,主键可以是一个或多个列的组合,但是必须满足以下条件: 主键列的值必须唯一,不能

    2024年02月08日
    浏览(48)
  • 【MySQL】MySQL表的约束-空属性/默认值/列属性/zerofill/主键/自增长/唯一键/外键

    表的约束:表中一定要有各种约束,通过约束,让我们未来插入数据库表中的数据是符合预期的。约束的本质是通过计数手段,倒逼程序员,插入正确的数据,反过来,站在mysql的视角,凡是插入进来的数据,都是符合约束的 约束的最终模板:保证数据的完整性和可预期性

    2024年02月01日
    浏览(46)
  • MySQL的多表关联查询

    多表关联查询是使用一条SQL语句,将关联的多张表的数据查询出来。 交叉查询就是将多张表的数据没有条件地连接在一起进行展示。 1.1.1 语法 使用交叉查询类别和商品 通过查询结果可以看到,交叉查询其实是一种错误的做法,在查询到的结果集中有大量的错误数据,称交叉

    2024年02月14日
    浏览(37)
  • MySQL中的多表查询详解

    目录 多表查询概述 一、多表关系 1.一对多(多对一) 2.多对多 3.一对一 二、多表查询概述 1.内连接 1.1、隐式连接 1.2、显示连接 2.外连接 1、左外连接 2、右外连接 3.自连接 4.联合查询 5.子查询 5.1、按照查询结果 5.1.1、标量子查询(通俗来说就像函数的返回值为一个结果值)

    2024年02月04日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包