mysql的外键

MySQL 中的外键是一种关系型数据库特性,用于在两个表之间建立关联。外键定义了一个表中的列(或多列)与另一个表中的数据的关系,通常是通过主键和外键之间的关联。在 Django 的模型中,外键通过 models.ForeignKey 字段来表示。

主表和从表: 在两个表中,包含外键的表被称为主表,被引用的表是从表。
主键和外键: 主表中的列通常是主键,而从表中的列则是外键,它与主表的主键相对应。

定义外键:
在 Django 模型中,可以通过 models.ForeignKey 字段来定义外键models.ForeignKey 用于创建一个多对一(Many-to-One)的关系。它允许一个模型通过外键与另一个模型建立关联。在 MySQL 中,这通常通过在一个模型中存储另一个模型的主键来实现。

from django.db import modelsclass Author(models.Model):name = models.CharField(max_length=100)class Book(models.Model):title = models.CharField(max_length=200)author = models.ForeignKey(Author, on_delete=models.CASCADE)

在这个例子中,我们有两个模型:Author 和 Book。Book 模型有一个外键 author,它与 Author 模型建立了关联。下面是一些关键概念:

ForeignKey 字段类型: models.ForeignKey 用于创建一个外键字段。它指定了与之关联的模型(这里是 Author)

on_delete 参数: 外键字段还有一个必需的参数 on_delete,它指定了在关联的对象被删除时采取的行为。常用的选项包括:

models.CASCADE: 当关联的对象被删除时,与之相关的所有对象也被删除。
数据库的级联删除
models.PROTECT: 阻止删除关联的对象,抛出 ProtectedError 异常。
models.SET_NULL: 将所有关联的外键字段设置为 NULL。要使用此选项,外键字段必须允许 NULL 值。
models.SET_DEFAULT: 将所有关联的外键字段设置为默认值。
models.SET(): 将所有关联的外键字段设置为特定的值。
models.DO_NOTHING: 什么都不做。
在上面的例子中,on_delete=models.CASCADE 表示当与之关联的 Author 对象被删除时,相关的 Book 对象也会被删除。

使用外键,你可以通过查询轻松地获取相关对象,例如:

# 获取某本书的作者
book = Book.objects.get(id=1)
author = book.author

这使得在数据库中建立和管理模型之间的关系变得更加容易。

related_name 是一个可选的参数,用于设置反向关系的名称。具体而言,它定义了从关联的模型反向查询时使用的名称。

class Article(models.Model):
column = models.ForeignKey(ArticleColumn,null=True,blank=True,on_delete=models.CASCADE,related_name='article'
)

这里的 related_name=‘article’ 意味着你可以通过 ArticleColumn 模型的实例直接访问与之相关的 ArticlePost 对象。例如,如果你有一个 column 实例,你可以使用 column.article.all() 获取与该栏目相关的所有文章。

my_column = ArticleColumn.objects.get(id=1)
related_articles = my_column.article.all()

这使得在模型之间进行反向查询更加方便,并且提供了更具有可读性的名称,而不是默认的 articlepost_set。

外键的作用:
维护数据一致性: 外键确保从表中的数据与主表中的数据保持一致,防止了不一致的情况。
建立关联: 外键建立了两个表之间的关联,使得它们在逻辑上形成了一种关系。
唯一性约束: 可以通过 unique=True 来指定外键是否唯一。
索引: 外键通常会自动创建索引,以提高查询性能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/183360.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

企业计算机服务器中了mallox勒索病毒如何解密,mallox勒索病毒文件恢复

随着网络技术的不断发展,网络安全威胁也在不断增加,勒索病毒攻击企业计算机服务器的事件时有发生,并且勒索病毒的加密形式也越来越复杂。近期,云天数据恢复中心陆续接到很多企业的求助,企业的计算机服务器遭到了mallox…

单片机----串行通信

目录 串行通信的两种方式 串行通信的传输模式 串行通信的错误校验 1.奇偶校验 2.代码和校验 3.循环冗余码校验 串行口结构 串行口控制寄存器SCON 特殊功能寄存器PCON 串行口的4种工作方式 方式0: (1)方式0的发送过程 &#xff0…

QString

目录 1 toInt() (1)qt_strtoll() (2) qstrtoll() (3)bytearrayToLongLong() (4)toIntegral_helper 1 toInt() 下面是toInt()函数的内部实现源码 QStri…

如何使用阿里云虚拟主机和域名设置网站?

本文档将向您展示如何使用阿里云虚拟主机来设置一个新网站,并完成一个域名。如果您按照此处的步骤操作,您将启动并运行一个新网站,可以使用您选择的名称在全球范围内访问,并托管在阿里云平台上。 本文档假设您已经拥有有效的阿里…

InstructDiffusion-多种视觉任务统一框架

论文:《InstructDiffusion: A Generalist Modeling Interface for Vision Tasks》 github:https://github.com/cientgu/InstructDiffusion InstructPix2Pix:参考 文章目录 摘要引言算法视觉任务统一引导训练集重构统一框架 实验训练集关键点检测分割图像…

微信小程序本地和真机调试文件上传成功但体验版不成功

可能是微信小程序ip白名单的问题,去微信公众平台(小程序)上设置小程序的ip白名单 1、在本地中取消不校验 然后在本地去上传文件,就会发现控制台报错了,会提示一个https什么不在ip白名单,复制那个网址 2、…

tomcat调优配置

一. 设置账户进入管理页面 通过浏览器进入Tomcat7的管理模块页面&#xff1a;http://localhost:8080/manager/status 按照提示&#xff0c;在Tomcat7服务器指定的位置修改配置文件&#xff08;conf/tomcat-users.xml&#xff09;&#xff0c;增加相应的用户和角色配置标签 <…

win11系列:避坑宝典|win11升级最新预览体验版bug梳理

win11系列&#xff1a;避坑宝典|win11升级最新预览体验版bug梳理 一、亲测win11升级的前世今生。&#xff08;一&#xff09;问题描述梳理。&#xff08;二&#xff09;故障原因分析。&#xff08;三&#xff09;具体解决方案。2.【已解决】①尝试关Hyper-v重启&#xff1b;②从…

基于AOP的声明式事物控制

目录 Spring事务编程概述 基于xml声明式事务控制 事务属性 isolation timeout read-only propagation 全注解开发 Spring事务编程概述 事务是开发中必不可少的东西&#xff0c;使用JDBC开发时&#xff0c;我们使用connection对事务进行控制&#xff0c;使用MyBatis时&a…

Django大回顾 -3 之响应对象、cbv和fbv、关于类中self是谁的问题、上传文件、模版

【1】isinstance方法 判断一个对象是否是一个已知的类型。 isinstance语法&#xff1a; isinstance(object&#xff0c;classinfo) object --------- 实例化对象 cassinfo ------- 可以是字节或间接类名、基本类型&#xff0c;或者由他们组成的元组 相同返回True&#xff0c;不…

肖sir__mysql之视图__009

mysql之视图 一、什么是视图 视图是一个虚拟表&#xff08;逻辑表&#xff09;&#xff0c;它不在数据库中以存储形式保存&#xff08;本身包含数据&#xff09;&#xff0c;是在使用视图的时候动态生成。 二、视图作用 1、查询数据库中的非常复的数据 例如&#xff1a;多表&a…

本地部署GPT的实战方案

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…

微机原理_8

一、单项选择题&#xff08;本大题共 15 小题&#xff0c;每小题 3 分&#xff0c;共 45 分。在每小题给出的四个备选项中&#xff0c;选出一个正确的答案&#xff0c;请将选定的答案填涂在答题纸的相应位置上。 1,微机内部除CPU外还集成了计算机的其它主要部件,如ROM、RAM、并…

LeetCode(38)生命游戏【矩阵】【中等】

目录 1.题目2.答案3.提交结果截图 链接&#xff1a; 生命游戏 1.题目 根据 百度百科 &#xff0c; 生命游戏 &#xff0c;简称为 生命 &#xff0c;是英国数学家约翰何顿康威在 1970 年发明的细胞自动机。 给定一个包含 m n 个格子的面板&#xff0c;每一个格子都可以看成是…

shell---免交互

一、多行重定向 可以理解为这是标准输入的一种替代品&#xff0c;可以帮助脚本开发人员不必使用临时文件来构建输入信息&#xff0c;可以直接产生一个文件&#xff0c;输入文件信息&#xff0c;常与非交互程序和命令一起使用 语法格式命令<< 标记..........标记 注意…

During handling of the above exception, another exception occurred解决方案

During handling of the above exception, another exception occurred解决方案 前言解决方案总结 前言 今天在写python读取图片中的内容的脚本的时候&#xff0c;常用的图像处理库包括Pillow和OpenCV。以下是使用Pillow库读取图片中的计算公式的示例代码&#xff1a; from P…

详解原生Spring当中的额外功能开发MethodBeforeAdvice与MethodInterceptor接口!

&#x1f609;&#x1f609; 学习交流群&#xff1a; ✅✅1&#xff1a;这是孙哥suns给大家的福利&#xff01; ✨✨2&#xff1a;我们免费分享Netty、Dubbo、k8s、Mybatis、Spring...应用和源码级别的视频资料 &#x1f96d;&#x1f96d;3&#xff1a;QQ群&#xff1a;583783…

Redis对象系统

前言 在Redis中有许多数据结构&#xff0c;比如&#xff1a;简单动态字符串(SDS)&#xff0c;双端链表&#xff0c;字典&#xff0c;压缩列表&#xff0c;整数集合等。 Redis并没有直接使用这些数据结构来实现键值对数据库&#xff0c;而是基于这些数据结构创建了一个对象系统。…

vue项目运行时,报错:ValidationError: webpack Dev Server Invalid Options

在运行vue项目中&#xff0c;遇到报错&#xff1a;ValidationError: webpack Dev Server Invalid Options&#xff0c;如下图截图&#xff1a; 主要由于vue.config.js配置文件错误导致的&#xff0c;具体定位到proxy配置代理不能为空&#xff0c;导致运行项目报错&#xff0c;需…

SQL中 JOIN 的两种连接类型:内连接(自然连接、自连接、交叉连接)、外连接(左外连接、右外连接、全外连接)

SQL中 JOIN 的两种连接类型&#xff1a;内连接&#xff08;自然连接、自连接、交叉连接&#xff09;、外连接&#xff08;左外连接、右外连接、全外连接&#xff09; 1. 自然连接&#xff08;natural join&#xff09;&#xff08;内连接&#xff09; 学生表 mysql> sele…