iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >MySQL外键关联操作的实现
  • 904
分享到

MySQL外键关联操作的实现

MySQL外键关联MySQL关联外键 2022-07-28 17:07:27 904人浏览 安东尼
摘要

目录Mysql 的外键约束修改原有表的外键约束删除外键约束mysql 的外键约束 注意,Mysql 的 InnoDB 表引擎才支持外键关联,MyISAM 不支持。MySQL 还支持手动打开或关闭外键约束:SET FORE

mysql 的外键约束

注意,Mysql 的 InnoDB 表引擎才支持外键关联,MyISAM 不支持。MySQL 还支持手动打开或关闭外键约束:SET FOREIGN_KEY_CHECKS = 0/1;。

使用外键约束最大的好处在于 MySQL 帮助我们完成数据的一致性检查。当我们使用默认的外键类型 RESTRICT 时,在创建、修改或者删除记录时都会检查引用的合法性。

假设我们的数据库中包含 posts(id, author_id, content) 和 authors(id, name) 两张表,在执行如下所示的操作时都会触发数据库对外键的检查:

向 posts 表中插入数据时,检查 author_id 是否在 authors 表中存在;

修改 posts 表中的数据时,检查 author_id 是否在 authors 表中存在;

删除 authors 表中的数据时,检查 posts 中是否存在引用当前记录的外键;

作为专门用于管理数据的系统,数据库与应用服务相比能够更好地保证完整性,而上述的这些操作都是引入外键带来的额外工作,不过这也是数据库保证数据完整性的必要代价。上述的这些分析都是理论上的定性分析,我们其实可以简单地定量分析一下引入外键对性能的影响。

创建表时定义外键(References,参照)

在 CREATE TABLE 语句中,通过 FOREIGN KEY 关键字来指定外键,具体的语法格式如下:

[CONSTRaiNT <外键名>] FOREIGN KEY 字段名 [,字段名2,…] REFERENCES <主表名> 主键列1 [,主键列2,…]

示例:

# 部门表 tb_dept1(主表)
CREATE TABLE tb_dept1
(
    id INT(11) PRIMARY KEY,
    name VARCHAR(22) NOT NULL,
    location VARCHAR(50)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312;
 
# 员工表 tb_emp6(从表),创建外键约束,让 deptId 作为外键关联到 tb_dept1 的主键 id。
CREATE TABLE tb_emp6
(
    id INT(11) PRIMARY KEY,
    name VARCHAR(25),
    deptId INT(11),
    salary FLOAT,
    CONSTRAINT fk_emp_dept1 FOREIGN KEY(deptId) REFERENCES tb_dept1(id)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312;

NOTE:从表的外键关联的必须是主表的主键,且主键和外键的数据类型必须一致。

以上语句执行成功之后,在表示 tb_emp6 上添加了名称为 fk_emp_dept1 的外键约束,外键名称为 deptId,其依赖于表 tb_dept1 的主键 id。

查看主表的约束信息

mariadb [test_db]> select * from INFORMATION_SCHEMA.KEY_COLUMN_USAGE where REFERENCED_TABLE_NAME='tb_dept1'\G;
*************************** 1. row ***************************
           CONSTRAINT_CATALOG: def
            CONSTRAINT_SCHEMA: test_db
              CONSTRAINT_NAME: fk_emp_dept1
                TABLE_CATALOG: def
                 TABLE_SCHEMA: test_db
                   TABLE_NAME: tb_emp6
                  COLUMN_NAME: deptId
             ORDINAL_POSITION: 1
POSITION_IN_UNIQUE_CONSTRAINT: 1
      REFERENCED_TABLE_SCHEMA: test_db
        REFERENCED_TABLE_NAME: tb_dept1
       REFERENCED_COLUMN_NAME: id
1 row in set (0.00 sec)

修改原有表的外键约束

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

在修改数据表时添加外键约束的语法格式如下:

ALTER TABLE <数据表名> ADD CONSTRAINT <外键名> FOREIGN KEY(<列名>) REFERENCES <主表名> (<列名>);

示例:修改数据表 tb_emp2,将字段 deptId 设置为外键,与数据表 tb_dept1 的主键 id 进行关联。

# 创建 tb_emp2(从表)
CREATE TABLE tb_emp2
(
    id INT(11) PRIMARY KEY,
    name VARCHAR(25),
    deptId INT(11),
    salary FLOAT
) ENGINE=InnoDB DEFAULT CHARSET=gb2312;
 
MariaDB [test_db]> desc tb_emp2;
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| id     | int(11)     | NO   | PRI | NULL    |       |
| name   | varchar(25) | YES  |     | NULL    |       |
| deptId | int(11)     | YES  |     | NULL    |       |
| salary | float       | YES  |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+
 
# 添加外键约束
ALTER TABLE tb_emp2 ADD CONSTRAINT fk_tb_dept1 FOREIGN KEY(deptId) REFERENCES tb_dept1(id);
 
MariaDB [test_db]> desc tb_emp2;
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| id     | int(11)     | NO   | PRI | NULL    |       |
| name   | varchar(25) | YES  |     | NULL    |       |
| deptId | int(11)     | YES  | MUL | NULL    |       |
| salary | float       | YES  |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+
 
MariaDB [test_db]> SHOW CREATE TABLE tb_emp2\G
*************************** 1. row ***************************
       Table: tb_emp2
Create Table: CREATE TABLE `tb_emp2` (
  `id` int(11) NOT NULL,
  `name` varchar(25) DEFAULT NULL,
  `deptId` int(11) DEFAULT NULL,
  `salary` float DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `fk_tb_dept1` (`deptId`),
  CONSTRAINT `fk_tb_dept1` FOREIGN KEY (`deptId`) REFERENCES `tb_dept1` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312

删除外键约束

当一个表中不需要外键约束时,就需要从表中将其删除。外键一旦删除,就会解除主表和从表之间的关联关系。

删除外键约束的语法格式如下所示:

ALTER TABLE <表名> DROP FOREIGN KEY <外键约束名>;

示例:删除数据表 tb_emp2 中的外键约束 fk_tb_dept1。

ALTER TABLE tb_emp2 DROP FOREIGN KEY fk_tb_dept1;
 
MariaDB [test_db]> SHOW CREATE TABLE tb_emp2\G
*************************** 1. row ***************************
       Table: tb_emp2
Create Table: CREATE TABLE `tb_emp2` (
  `id` int(11) NOT NULL,
  `name` varchar(25) DEFAULT NULL,
  `deptId` int(11) DEFAULT NULL,
  `salary` float DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `fk_tb_dept1` (`deptId`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312

到此这篇关于MySQL外键关联操作的实现的文章就介绍到这了,更多相关MySQL外键关联操作内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

您可能感兴趣的文档:

--结束END--

本文标题: MySQL外键关联操作的实现

本文链接: https://www.lsjlt.com/news/33492.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • mysql中怎么实现外键关联
    mysql中怎么实现外键关联,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。 > show create table cou...
    99+
    2024-04-02
  • mysql创建表怎么设置外键关联
    在MySQL中,可以通过在创建表时使用FOREIGN KEY关键字来设置外键关联。下面是一个示例:```sqlCREATE TABL...
    99+
    2023-08-30
    mysql
  • 如何让MySQL外键和主键自动关联起来?
    如何让MySQL外键和主键自动关联起来? 在MySQL数据库中,外键和主键是非常重要的概念,它们能够帮助我们在不同表之间建立关联关系,保证数据的完整性和一致性。在实际的应用过程中,经常...
    99+
    2024-03-15
    主键 外键 关联
  • PHP中怎么实现关联数组操作
    这篇文章将为大家详细讲解有关PHP中怎么实现关联数组操作,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。基本的数字格式的数组遍历:<php   $temp[...
    99+
    2023-06-17
  • MySQL多表操作的外键约束教程
    目录一.多表关系一对一关系一对多/多对一关系多对多关系二.外键约束特点创建外键约束方式1-在创建表时设置外键约束方式2-在创建表时设置外键约束在外键约束下的操作1.数据插入2.删除数据3.删除外键约束外键约束-多对多关系...
    99+
    2023-01-30
    mysql外键约束 mysql 多表操作
  • Apache Pig中怎么实现数据的关联操作
    在Apache Pig中实现数据的关联操作可以通过使用JOIN语句来实现。JOIN语句可以将两个或多个数据集按照指定的条件进行连接,...
    99+
    2024-04-02
  • sql语句创建外键关联的完整实例
    以创建学生教师表为例: 学生 id 关联教师 tid 学生表: student 教师表: teacher sql语句 : USE school; CREATE TABLE ...
    99+
    2024-04-02
  • 如何在MySQL中利用外键实现级联删除
    本篇内容介绍了“如何在MySQL中利用外键实现级联删除”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!下面,...
    99+
    2024-04-02
  • oracle如何查看外键关联的表
    在Oracle中,您可以使用以下SQL语句来查看外键关联的表: SELECT a.table_name AS fo...
    99+
    2024-04-17
    oracle
  • mysql删除关联表的实操方法
    mysql数据库中,表与表之间进行关联之后,就不可随意的进行删除操作,否则会影响所有关联表之间的结构,那么如何安全的删除关联表呢,让我们来了解一下。 删除表的外键约束 外键是一个特殊字段,其将某一个表与其父...
    99+
    2024-04-02
  • mysql-外键的三种关系
    介绍因为有foreign key的约束,使得两张表形成了三种了关系:多对一多对多一对一重点理解如果找出两张表之间的关系分析步骤: #1、先站在左表的角度去找 是否左表的多条记录可以对应右表的一条记录,如果是,则证明左表的一个字段foreig...
    99+
    2023-01-30
    三种 关系 mysql
  • mysql中的外键的作用
    mysql 中的外键扮演着约束关系和数据维护者的角色,具有三个主要作用:确保表之间的引用完整性,防止因删除或更新表记录而造成数据不一致;通过规则级联强制在表之间执行操作,确保引用完整性和...
    99+
    2024-05-01
    mysql
  • mysql外键的关系有哪些
    mysql外键的关系有哪些,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。  多对一  create table press( ...
    99+
    2024-04-02
  • gORM操作MySQL的实现
    ORM 框架 ORM:Object  Relational   Mapping  —— 对象关系映射。 作用: 通过操作结构体对象...
    99+
    2024-04-02
  • mysql中如何实现多表联合查询操作
    这篇文章将为大家详细讲解有关mysql中如何实现多表联合查询操作,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。MySQL多表联合查询语法:复制代码 代码如下...
    99+
    2024-04-02
  • linq级联操作怎么实现
    这篇文章主要介绍“linq级联操作怎么实现”,在日常操作中,相信很多人在linq级联操作怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”linq级联操作怎么实现”的疑惑有所帮助!接下来,请跟着小编一起来...
    99+
    2023-06-17
  • sql外键关联建立的方法是什么
    在SQL中,可以使用FOREIGN KEY约束来建立表与表之间的外键关联。具体而言,可以在创建表的时候使用FOREIGN KEY约束...
    99+
    2024-04-09
    sql
  • django外键关联查询的方法是什么
    在Django中,外键关联查询可以使用以下几种方法: 使用双下划线()进行跨表查询。 例如,如果有一个模型A和一个外键关联的模型...
    99+
    2023-10-24
    django
  • navicat建立外键的操作方法
    这篇文章主要介绍了navicat建立外键的操作方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。  数据库外键表示了两个关系之间的相关联系。...
    99+
    2024-04-02
  • MYSQL外键的作用是什么
    MYSQL外键的作用是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。  MYSQL外键是什么  定义:外键是相对于主键说的,是建立表之间联...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作