首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

MySQL 数据库添加数据为什么会产生外码(约束?原理就是什么?如何解决?

文章目录 前言 一、插入新数据时报错约束? 二、对于出错 SQL 语句的分析 三、对于外码约束的分析 四、如何处理约束?...总结 ---- 前言 我们使用 MySQL 数据库添加数据如果设计不合理很容易出现外码约束的情况,为什么会产生这样的问题?那我们该如何处理这一问题呢?依据又是什么?...一、插入新数据时报错约束? 我们 Course 表中插入课程号为 1 的数据提示违反了约束。...三、对于外码约束的分析 我们根据数据库定义的参照完整性规则得知: cpno 的取值不为空的情况下(如上 cpno=‘5’),与其对应的主键 cno 参照表中必须存在。...四、如何处理约束? 解决方法: 插入数据的时候,所有的 cpno 字段暂时都置为 null,所有数据插入以后,再依次更新这些数据的 cpno 的值。该方法的优点是复杂性低,容易实现。

2.9K31
您找到你想要的搜索结果了吗?
是的
没有找到

Django ForeignKey与数据库的FOREIGN KEY约束详解

数据库高并发的场景下使用约束会有锁问题并且使用会增加运维成本,所以很多公司都规定生产环境的数据库禁止使用。...那么不使用约束的情况下使用 Django ORM 如何实现关联查询两个表呢?这曾是困扰我很久的一个问题,今天终于找到了答案,写出来分享一下。...开头提到的场景下,我们可以这样创建两个表对应的 Model,以省和市的关联举例: # demo/models.py from django.db import models class Province...__unicode__(self): return self.name 以上的 models.py 执行 migrate 生成的 SQL 如下(MySQL数据库): CREATE TABLE...50fffd49` ON `demo_city` (`province_id`); 如果 ForeignKey 不添加db_constraint=False 参数,会在数据库中使用约束,生成以下SQL

2.5K10

Sentry 开发者贡献指南 - 数据库迁移

在这种情况下,首先删除其他表中的列,然后返回到此步骤。 通过列上设置 db_constraint=False,删除此表到其他表的任何数据库级约束。...接下来,我们需要删除和 db 级约束。... 创建大多没问题,但是对于像 Project、Group 这样的大/繁忙的表,由于获取锁的困难,它可能会导致问题。您仍然可以创建 Django 级别的,而无需创建数据库约束。...添加创建新列,它们应始终创建为可为空的。这是出于两个原因: 如果存在现有行,添加非空列需要设置默认值,添加默认值需要完全重写表。这是危险的,很可能会导致停机 部署期间,新旧代码混合运行。... Postgres 12 之后,我们可以扩展这个方法来添加一个真正的 NOT NULL 约束。 如果表足够小并且体积足够小,那么创建一个普通的 NOT NULL 约束应该是安全的。

3.6K20

Django-migrate报错问题解决方案

的数据库迁移 但是今天一天的时间都耽误在这了,一点都不夸张的那种,,早上去公司讨论需求之后,研究了一下需要更改一下数据库,执行makemigrations的时候OK没有问题,但是migrate就报错了...= 0; // 先设置约束检查关闭             2、drop table XX; // 删除数据,表或者视图             3、SET foreign_key_checks...= 1; // 开启约束检查,以保持表结构完整性  2.表删了之后重新执行migrate,又报错别的表存在,如此一直循环往复,我都怀疑这是人家写的一个while True,     我:找到了第二种解决方案...3.将之前执行makemigrations生成的migrations文件夹删除,重新来过,OK,还是一样的毛病, 4.重新创建了database之后,重新来过,只生成了django自带的那几张表,然而项目里大多的数据存储都是依靠我每一个...app里创建的table里呀 5.将每个APP下的migrations都删掉,database也重新来过,好嘛,连最基本的数据库迁移文件夹都不能生成了,一瞬间有种悔不当初的感觉,但是又能怎么样呢,就是需要调整数据库呀

1.5K10

Django模型最佳实践

用OneToOneField代替ForeignKeyField(unique=True)。 通过“迁移操作”(migrate)来添加模型。 用NoSQL来应对需要降低范式级别的场景。...数据库中对应的字段是否允许为NULL,默认为False blank 后台模型管理验证数据,是否允许为NULL,默认为False choices 设定字段的选项,各元组中的第一个值是设置模型上的值,...db_constraint:是否为创建约束,默认值为True。...on_delete:关联的对象被删除对应的动作,可取的值包括django.db.models中定义的: CASCADE:级联删除。...SET_NULL:把设置为null,当null属性被设置为True才能这么做。 SET_DEFAULT:把设置为默认值,提供了默认值才能这么做。

2.2K40

【Python全栈100天学习笔记】Day41 Django深入理解框架

用OneToOneField代替ForeignKeyField(unique=True)。 通过“迁移操作”(migrate)来添加模型。 用NoSQL来应对需要降低范式级别的场景。...db_constraint:是否为创建约束,默认值为True。...on_delete:关联的对象被删除对应的动作,可取的值包括django.db.models中定义的: CASCADE:级联删除。...SET_NULL:把设置为null,当null属性被设置为True才能这么做。 SET_DEFAULT:把设置为默认值,提供了默认值才能这么做。...managed 设置为TrueDjango迁移中创建数据表并在执行flush管理命令把表移除 order_with_respect_to 标记对象为可排序的 ordering 对象的默认排序 permissions

2.2K30

Django 1.10中文文档-第一个应用Part2-模型和管理站点

但是首先得INSTALLED_APPS中添加此应用。...(你也可以重写这个行为); 按照惯例,Django会在外的字段名后面添加 "_id"。(你依然可以重写这个行为); 关系由FOREIGN KEY约束显式声明。...不用在意DEFERRABLE部分;它只是告诉PostgreSQL直到事务的最后再执行关联; 这些SQL语句是针对你所使用的数据库定制的,所以会为你自动处理某些数据库所特有的字段例如auto_increment...处理字段名的引号也是如此 —— 例如,使用双引号还是单引号; sqlmigrate命令并不会在你的数据库上真正运行迁移文件 —— 它只是把Django 认为需要的SQL打印屏幕上以让你能够看到...def __str__(self): return self.choice_text 模型中添加__str __()方法非常重要,不仅仅是为了方便您处理交互式提示,而且Django

2.2K60

python-Django-Django 数据库迁移(二)

其中,author是一个字段,指向Author模型。...如果我们现在想要向Post模型中添加一个category字段,我们只需模型定义中添加这个字段,如下所示:from django.db import modelsclass Author(models.Model...=True, blank=True)然后,我们可以执行makemigrations命令来创建新的迁移文件:python manage.py makemigrations blog执行上述命令后,Django...name:指定要添加的字段的名称(即category)。field:指定要添加的字段的类型和属性(即CharField(blank=True, max_length=50, null=True))。...创建迁移文件后,我们可以使用migrate命令来应用该迁移:python manage.py migrate blog执行上述命令后,Django将在数据库中创建一个新的blog_post表,并向该表中添加一个

73720

Django 数据库迁移应该了解的操作

python manage.py makemigrations 这个命令是创建数据库迁移脚本,针对已经app已经修改的model生成迁移脚本 python manage.py migrate 这个命令是数据库执行迁移脚本同步到数据库...特别是migrate命令,由于django的数据库中包含了migrations的记录,如果migrations文件丢失,很可能造成migrate失败。...所以有必要将migrations文件加入版本控制,保证开发的migrations记录和文件相匹配。...如果migrate出现了失败,很可能是因为migration文件包含的变更信息由于当前数据库的约束无法完完成。这时就应该去数据中找到这些记录或的位置,删掉重做即可。...一般这些数据存在的表为:约束对应的表、auth_permission、django_content_type和django_migrations.

1.5K10

彻底搞懂Django中的数据迁移

关系型数据库又是数据库中的一种,其中的数据以表的形式组织,表具有一定数量的列、任意数量的行,每张表又可以通过连接其他的表。 表中每列都有特定的数据类型,这就是 Django 里常说的字段了。...然后必须在 INSTALLED_APPS 配置中添加 mig ,并且 mig 还得带有 migrations/ 目录以及目录下的 __init__.py 文件,否则 Django 不会为这个 app 创建任何迁移...执行 makemigrations 指令Django 不会检查你的数据库,而是根据目前的模型的状态,创建一个操作列表,使项目状态与模型定义保持最新。...除了 0003_remove_pen_color.py 文件被重新创建,没有任何事情发生,因为迁移记录表中已经有对应的 0003 号记录了,数据库操作不会重复执行。...这样子的结果就是 Model 和数据库字段不一致,进行相关 ORM 操作就会出现各种报错。 不要以为这种情况很少见,新手不正常操作迁移的过程中是有可能发生的。

5.8K20

Django中的模型类设计及展示示例详解

,生成对应的数据库表字段 属性名 = models.字段类型 字段类型 — 一旦修改类型就需要重新迁移 AutoField: 自动增长,通常不需要指定,django自动创建名为id的自动增长属性 CharField...,True NullBooleanField: 支持NullTrue,False DateTimeField: 日期时间 FileField: 上传文件字段 ImageField: 继承与FileFiled...,对上传的内容进行校验,确保是有效地图片 ForeignKey: ,建立一对多关系 from django.db import models # Create your models here....然后开启django项目输入 http://127.0.0.1 :8000/admin/ 用户名和密码填写 登陆进去后就会看到创建的数据模型 ? 点击add可以添加一些数据 会有你写的模型类 ?...启动django,打开本地网址 ? 我们可以给页面添加照片可以使得页面更好看点 添加放置照片的文件夹在更目录的同级目录下 ? 并且settings中对static文件夹路径加以说明 ?

1.4K30

django_mysql_配置

自己数据中创建一个djangi_demo create database django_demo default charset=utf8; ---- 定义模型类 1....2) django会为表创建自动增长的主键列,每个模型只能有一个主键列,如果使用选项设置某属性为主键列后django不会再创建自动增长的主键列。...null是数据库范畴的概念,blank是表单验证范畴的 5) 一般我用CASCADE 设置,需要通过on_delete选项指明主表删除数据,对于引用表数据如何处理,django.db.models...中包含了可选常量: CASCADE 级联,删除主表数据连通一起删除外表中数据 PROTECT 保护,通过抛出ProtectedError异常,来阻止删除主表中被应用的数据 SET_NULL...设置为NULL,仅在该字段null=True允许为null可用 SET_DEFAULT 设置为默认值,仅在该字段设置了默认值可用 SET() 设置为特定值或者调用特定方法,如 from

1.6K10

django自带的contentType表

models.py文件的表结构写好后,通过makemigrations和migrate两条命令迁移数据后,在数据库中会自动生成一个django_content_type表,比如我们有models.py..., null=True) food = models.ForeignKey(to='Foods', null=True) cloth = models.ForeignKey(to='Clothes'..., null=True) ?   ...但是这样做是有问题的:实际中商品品类繁多,而且很可能还会持续增加,那么优惠券表中的将越来越多,但是每条记录仅使用其中的一个或某几个字段。   ...创建记录     关系表的结构 ?   用语法给关系表加记录。   添加方式1: ? ?   接下来用postmen来发送请求 ?   然后代金券表数据就添加完成了 ?   添加方式2: ?

1.2K20
领券