MySQL - 数据库级别的外键

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

1. 外键 FOREIGN KEY (了解)

测试数据 :

学生表

CREATE TABLE IF NOT EXISTS `student` (
	`id` INT(4) NOT NULL AUTO_INCREMENT COMMENT  '学号',
	`name` VARCHAR(30) NOT NULL DEFAULT '匿名' COMMENT '姓名',
	`pwd` VARCHAR(20) NOT NULL DEFAULT '123456' COMMENT '密码',
	`sex` VARCHAR(2) NOT NULL DEFAULT '女' COMMENT '性别',
	`birthday` DATETIME DEFAULT NULL COMMENT '出生日期',
	`gradeid` INT(10) NOT NULL COMMENT '学生的年级',
	`address` VARCHAR(100) DEFAULT NULL COMMENT '家庭住址',
	`email` VARCHAR(50)  DEFAULT NULL COMMENT '邮箱',
	PRIMARY KEY(`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8;

年级表

CREATE TABLE `grade`(
	`gradeid` INT(10) NOT NULL AUTO_INCREMENT COMMENT '年级id',
	`gradename` VARCHAR(50) NOT NULL COMMENT '年级名称',
	PRIMARY KEY(`gradeid`)
)ENGINE=INNODB DEFAULT CHARSET=utf8;

 学生表的 grade 列引用年级表的 id (外键约数) : 

MySQL - 数据库级别的外键,MySQl,数据库,mysql,sql

2. 设置外键的两种方式 

2.1 建表时增加约束

  • 定义外键 key
  • 给这个外键添加约束 (执行引用) references 引用
CREATE TABLE IF NOT EXISTS `student` (
	`id` INT(4) NOT NULL AUTO_INCREMENT COMMENT  '学号',
	`name` VARCHAR(30) NOT NULL DEFAULT '匿名' COMMENT '姓名',
	`pwd` VARCHAR(20) NOT NULL DEFAULT '123456' COMMENT '密码',
	`sex` VARCHAR(2) NOT NULL DEFAULT '女' COMMENT '性别',
	`birthday` DATETIME DEFAULT NULL COMMENT '出生日期',
	`gradeid` INT(10) NOT NULL COMMENT '学生的年级',
	`address` VARCHAR(100) DEFAULT NULL COMMENT '家庭住址',
	`email` VARCHAR(50)  DEFAULT NULL COMMENT '邮箱',
	PRIMARY KEY(`id`),
	KEY `FK_gradeid` (`gradeid`)
	CONSTRAINT `FK_gradeid` FOREIGN KEY(`gradeid`) REFERENCES `grade`(`gradeid`)
)ENGINE=INNODB DEFAULT CHARSET=utf8;

2.2 建表成功后添加外键约束

ALTER TABLE `student`
ADD CONSTRAINT `FK_gradeid` FOREIGN KEY(`gradeid`) 
REFERENCES `grade`(`gradeid`);

-- ALTER TABLE 表名 ADD CONSTRAINT 约束名 
-- FOREIGN KEY(作为外键的列) REFERENCES 哪个表(哪个字段)

【注意】 

   当我们给表添加上外键后, 我们想要删除有外键关系的表的时候, 必须要先删除引用别人的表 (从表), 再删除被引用的表 (主表). 

对于上述外键的学习, 以上操作都是物理外键, 也就是数据库级别的外键, 我们不建议使用. 为了避免数据过多造成困扰. 所以只需要了解即可. 并且很多人在工作中确实也不会使用外键. 包括阿里的 Java 规范中也给出这样一句话 :

【强制】不得使用外键与级联, 一切外键概念必须在应用层解决.

外键的最佳实践文章来源地址https://www.toymoban.com/news/detail-516270.html

  • 数据库就是单纯的表, 只用来存储数据, 只有 行(数据) 和 列(字段).
  • 我们想使用多张表的数据, 想使用外键的时候, 在应用层去实现, 也就是使用程序实现.

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

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

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

相关文章

  • 【Mysql数据库 第13章】MySQL的事务、事务的隔离级别、事务的保存点

    💖Spring中的创建对象的三种方式、第三方资源配置管理详细描述及使用(XML版完结篇) 💖Spring中的bean的配置、作用范围、生命周期详细描述及使用(XML版上篇) 💖

    2023年04月20日
    浏览(53)
  • 【后端面经-数据库】MySQL的事务隔离级别简介

    目录 0. 事务的概念 1. 三类问题 2. 事务隔离级别 3. 操作指令 4. 总结 5. 参考博文 事务指的是一连串的集中操作指令,一个事务的执行必须执行完所有的动作才能算作执行结束。事务具有四个特点,简记作 ACID : A -Atomicity: 原子性,事务的执行必须保证所有的动作都执行完毕;

    2024年02月08日
    浏览(46)
  • 【数据库】如何利用Python中的petl将PostgreSQL中所有表的外键删除,迁移数据,再重建外键

    在数据库管理中,外键是一种重要的约束,用于确保数据的一致性和完整性。然而,在某些情况下,我们可能需要删除或修改外键。本文将介绍如何使用Python中的petl库将PostgreSQL中所有表的外键删除,迁移数据,并重新建立外键。 首先,我们需要安装petl和psycopg2库。在命令行

    2024年02月10日
    浏览(47)
  • elasticsearch的查询方式和mysql数据库事务隔离级别的思考

    目录 普通分页 解除查询限制 scroll查询 search_after 官方改进 轻量级试图(pit,Point in time) 总结 项目中用到了 elasticsearch,发现有几种查询方式不太一样,思考了一下,总结如下 等同于关系数据库的分页查询,例如 mysql 的 limit,如下 sql 这种查询方式有一个问题,需要查询

    2024年01月18日
    浏览(49)
  • MySQL数据库中,在读已提交和可重复读这两个不同事务隔离级别下幻读的区别

    在正式开始之前,先简单回顾一下并发事务存在的问题以及事务的隔离级别等内容。 1.1 并发事务存在的问题 当两个或者两个以上事务同时开启去处理同一个表的数据时,可能会存在以下的问题: 丢失修改 脏读 不可重复读 幻读 丢失修改 丢失修改是指当两个或多个事务更新

    2024年02月02日
    浏览(53)
  • 【MySQL 】MySQL 创建数据库, MySQL 删除数据库,MySQL 选择数据库

    作者简介: 辭七七,目前大一,正在学习C/C++,Java,Python等 作者主页: 七七的个人主页 文章收录专栏: 七七的闲谈 欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖💖 我们可以在登陆 MySQL 服务后,使用 create 命令创建数据库,语法如下: 以下命令简单的演示了创建数据库的过程,

    2024年02月13日
    浏览(86)
  • 【MySQL数据库】初识MySQL数据库、安装MySQL

    在今天的数字化世界中,数据是企业和个人的重要资产。管理和存储数据变得至关重要,而 MySQL 数据库是一种备受欢迎的开源关系型数据库管理系统,它提供了稳定、可靠、高性能的数据存储解决方案。本文将介绍 MySQL 数据库的基本概念和安装过程,以便初学者能够轻松上

    2024年02月08日
    浏览(62)
  • 【MySQL数据库】MySQL数据库管理

    Structure Query Language(结构化查询语言)简称SQL,它被美国国家标准局(ANSI)确定为关系型数据库语言的美国标准,后被国际化标准组织(ISO)采纳为关系数据库语言的国际标准。数据库管理系统可以通过SQL管理数据库;定义和操作数据,维护数据的完整性和安全性。 数据:(data)

    2024年02月08日
    浏览(49)
  • 初识MySQL数据库——“MySQL数据库”

    各位CSDN的uu们你们好呀,小雅兰好久没有更文啦,确实是心有余而力不足,最近学习的内容太难了,这篇博客又是小雅兰的新专栏啦,主要介绍的是一些MySQL数据库的知识点,下面,让我们进入初识MySQL数据库的世界吧 为什么要使用数据库 数据库与数据库管理系统 MySQL介绍

    2024年02月06日
    浏览(50)
  • MySQL数据库:数据库管理系统与安装MySQL数据库

    目录 一、理论 1.数据库管理系统 2.关系型数据库 3.数据库 4.MySQL数据库 5.MySQL部署 二、实验 1.yum安装MySQL 2.编译安装MySQL 3.配置MySQL数据库的Tab补全  三、问题 1.数据库登录报错 2.数据库密码复杂度报错 3.数据库连接报错 四、总结 (1)概念 数据库管理系统(Database Management

    2024年02月12日
    浏览(62)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包