专业游戏门户,分享手游网游单机游戏百科知识攻略!

嗨游网
嗨游网

外键约束怎么写,MySql外键约束教程

来源:小嗨整编  作者:小嗨  发布时间:2023-03-24 01:46
摘要:外键约束怎么写,MySql外键约束教程学习目标掌握外键约束的添加方法知道外键约束字段的添加及删除规则1.多表查询概述l实际开发中,一个项目通常需要很多张表才能完成。l例如:一个商城项目就需要分类表(category)、商品表(product...

外键约束怎么写,MySql外键约束教程

学习目标

  • 掌握外键约束的添加方法

  • 知道外键约束字段的添加及删除规则

1.多表查询概述

l实际开发中,一个项目通常需要很多张表才能完成。

l例如:一个商城项目就需要分类表(category)、商品表(products)、订单表(orders)等多张表。且这些表的数据之间存在一定的关系,接下来我们将在单表的基础上,一起学习多表方面的知识。

外键约束怎么写,MySql外键约束教程

一对多关系:

常见实例:客户和订单,分类和商品,部门和员工。

一对多建表原则:在从表(多方)创建一个字段,字段作为外键指向主表(一方)的主键。

外键约束怎么写,MySql外键约束教程

2.外键约束

2.1外键约束的定义

现在我们有两张表“分类表”和“商品表”

外键约束怎么写,MySql外键约束教程

为了表明商品属于哪个分类,通常情况下,==我们将在商品表上添加一列,用于存放分类cid的信息==,此列称为:外键

外键约束怎么写,MySql外键约束教程

此时“分类表==category”称为:主表==,“cid”我们称为主键。“商品表==products”称为:从表==,category_id称为外键。我们通过主表的主键和从表的外键来描述主外键关系,呈现就是==一对多关系==。

外键特点:

从表外键的值是对主表主键的引用。

从表外键类型,必须与主表主键类型一致。

举例:

外键约束怎么写,MySql外键约束教程

上述表中,product表中的两条记录中的商品,都属于汽车分类。

category分类表,为唯一方,也就是主表,必须提供主键cid

products商品表,为多方,也就是从表,必须提供外键category_id

2.2绑定外键约束

为了我们可以更加清楚的体现商品表与分类表之间的联系,我们准备以下两张表,并建立外键关联关系:

绑定外键约束的格式如下:

在创表语句后添加:CONSTRAINT FOREIGN KEY (外键字段) REFERENCES 主表名(主键)

# 创建分类表
CREATE TABLE category
(
   cid   VARCHAR(32) PRIMARY KEY,
   cname VARCHAR(100) #分类名称
);
# 商品表
CREATE TABLE products
(
   pid         VARCHAR(32) PRIMARY KEY,
   name        VARCHAR(40),
   price       DOUBLE,
   category_id VARCHAR(32),
#     CONSTRAINT 约束
#     REFERENCES 参考
   CONSTRAINT FOREIGN KEY (category_id) REFERENCES category (cid) # 添加约束
);
# 查看表结构
# 主表不需要进行任何操作,从表在表内设置外键字段,绑定主表主键即可
DESC products;
DESC category;

此时,主表结构为:

图片

从表结构为:

图片

外键约束绑定成功。

2.3外键约束检测

插入数据

接下来,我们向分类(category)表中添加数据记录。

INSERT INTO category (cid ,cname) VALUES('c001','服装');

向商品表添加普通数据,没有外键数据,默认为null

INSERT INTO products (pid,pname) VALUES('p001','土豆');

然后向商品(product)表中添加数据记录,外键信息填写刚才插入的主表主键的值”c001“

INSERT INTO products (pid ,pname ,category_id) VALUES('p002','夹克','c001');

思考:如果在从表中插入的外键值,在主表中不存在会怎样? 我们来试一下:

INSERT INTO products VALUES ('p003', '坦克', 1200000, 'c002');

此时将会报错,错误信息为:Cannot add or update a child row: a foreign key constraint fails (test01.products, CONSTRAINTproducts_ibfk_1FOREIGN KEY (category_id) REFERENCEScategory(cid))。

得出结论:==当我们引用的外键,在主表主键中没有相同的值,则不能插入,但是可以插入空值==。

删除数据

我们将分类(category)表中的’c001‘数据进行删除

DELETE FROM category WHERE cid = 'c001';

此时将会报错,错误信息为Cannot delete or update a parent row: a foreign key constraint fails (test01.products, CONSTRAINTproducts_ibfk_1FOREIGN KEY (category_id) REFERENCEScategory(cid))。

为什么会出现这种情况呢??

我们再尝试一下,先将商品(product)表中,引用主表中该条数据的记录删除。

DELETE FROM products WHERE pid = '002';

删除后,此时没有任何从表记录引用主表的c001分类,我们再次尝试删除分类(category)表中的’c001‘数据。

DELETE FROM category WHERE cid = 'c001';

删除成功。

由此我们得出结论:==如果要删除主表中的记录,需要先将从表中所有引用该数据的记录删除或者修改为引用其他记录==。

2.4外键约束的优点

  • ==在插入数据时,保证了数据的准确性==

  • ==在删除数据时,保证了数据的完整性==

3.小结

  • 实际开发中,一个项目通常需要很多张表才能完成。

  • 一对多建表原则:在从表(多方)创建一个字段,字段作为外键指向主表(一方)的主键。

  • 从表外键的值是对主表主键的引用。

  • 从表外键类型,必须与主表主键类型一致。

  • 从表中引用了主表中的数据,主表中数据不可被删除。

  • 主表中没有数据,从表外键也无法被插入。

  • 外键约束的优点:

  • 在插入数据时,保证了数据的准确性

  • 在删除数据时,保证了数据的完整性


本文地址:软件教程频道 https://www.eeeoo.cn/ruanjian/938565.html,嗨游网一个专业手游免费下载攻略知识分享平台,本站部分内容来自网络分享,不对内容负责,如有涉及到您的权益,请联系我们删除,谢谢!


软件教程
小编:小嗨整编
相关文章相关阅读
  • mysql安装教程图解(mysql安装教程最新)

    mysql安装教程图解(mysql安装教程最新)

    mysql安装教程图解(mysql安装教程最新)MySQL是当前最流行的关系型数据库管理系统之一,在Web应用方面MySQL是最好的RDBMS(RelationalDatabaseManagementSystem:关系数据库管理系统)应用软...

  • mysql中的不等于符号是什么

    mysql中的不等于符号是什么

    mysql中的不等于符号有两种:“!=”和“”;它们都可用于判断数字、字符串、表达式是否不相等。对于“!=”和“”,如果两侧操作数不相等,返回值为1,否则返回值为0;如果两侧操作数有一个是null,那么返回值也是null。本教程操作环境:w...

  • mysql列转行函数是什么

    mysql列转行函数是什么

    在mysql中,列转行函数是“group_concat()”函数;该函数用于将非空列值按照分组条件进行合并并最终返回,如果其中有空值则返回的结果是空,语法为“selectgroup_concat(name separator';')列...

  • MySQL连接被重置,如何处理?

    MySQL连接被重置,如何处理?

    mysql连接被重置,如何处理?MySQL是一种常用的关系型数据库管理系统,广泛应用于各种不同规模的项目中。然而,在使用MySQL时,有时会遇到连接被重置的情况,这可能会给我们的项目带来一些麻烦。本文将介绍MySQL连接被重置的原因以及如何...

  • mysql环境变量如何配置

    mysql环境变量如何配置

    mysql环境变量的配置方法:1、找到c盘中的mysql安装路径;2、在“我的电脑"中,依次点击“系统属性”-“高级系统设置”选项;3、在“环境变量”弹窗中,依次点击“高级”-“系统变量”;4、找到path路径,点击“编辑”选项,......

  • mysql查询怎么设置降序

    mysql查询怎么设置降序

    在mysql中,可以利用desc关键字对查询结果进行降序显示,该关键字是descend的缩写,常于orderby子句配合使查询结果降序,语法为“select字段1,字段2...from表名orderby指定字段desc”。本...

  • 一文搞懂MySQL索引下推

    一文搞懂MySQL索引下推

    本篇文章给大家带来了关于mysql的相关知识,其中主要介绍了关于索引下推的相关内容,索引条件下推也叫索引下推,英文全称indexconditionpushdown,简称icp,用于优化数据查询,下面一起来看一下,希望对大家有帮助。推荐学...

  • 创建存储过程 mysql

    创建存储过程 mysql

    mysql是一款流行的开源关系数据库管理系统,在处理大量数据时表现出色。存储过程是一种可重复使用的代码块,它们可以与数据表交互,并可以在查询中调用。本文将介绍如何创建存储过程,以及如何在MySQL中调用和使用它们。一、创建存储过程在...

  • 周排行
  • 月排行
  • 年排行

精彩推荐