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

django模型中有外键关系的表删除相关设置

0904自我总结 django模型中有外键关系的表删除相关设置 一.一对一 例如有Author、AuthorDetail两表 author = models.OneToOneField(to='Author...) 1)关系字段放在AuthorDetail表中:作者删除详情删除,详情删除作者保留 2)作者找详情用 外键related_name(detail),详情找作者用 外键字段(author)...Book表中(多的一方):出版社删除书外键不动,书删除没有任何影响 2)出版社找书用 外键related_name(books),书找出版社 外键字段(publish) 3)db_constraint...两者区别 models.SET关联表内容删了,关联的相关内容不会删除 models.CASCAD关联表内容删了,关联的相关内容会删除 db_constraint关系断开后,但是不影响联表查询 四.多对多关系...', db_constraint=False, ) 1)关系字段放在任意一方都可以:出版社删除或书删除彼此不影响,但关系表一定级联删除 2)正向找 外键字段,反向找 外键字段related_name

3K20

Django学习-第七讲:django 中的常用字段、字段属性,外键和表关系、外键操作

外键和表关系 在MySQL中,表有两种引擎,一种是InnoDB,另外一种是myisam。如果使用的是InnoDB引擎,是支持外键约束的。外键的存在使得ORM框架在处理表关系的时候异常的强大。...第一个参数是引用的是哪个模型,第二个参数是在使用外键引用的模型数据被删除了,这个字段该如何处理,比如有CASCADE、SET_NULL等。这里以一个实际案例来说明。...比如有一个Category和一个Article两个模型。一个Category可以有多个文章,一个Article只能有一个Category,并且通过外键进行引用。...因此在底层,Django为Article表添加了一个属性名_id的字段(比如author的字段名称是author_id),这个字段是一个外键,记录着对应的作者的主键。...那么在对方那个模型被删掉后,该进行什么样的操作。可以通过on_delete来指定。可以指定的类型如下: 1.CASCADE:级联操作。如果外键对应的那条数据被删除了,那么这条数据也会被删除。

4K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Django——ContentType(与多个表建立外键关系)及ContentType-signals的使用

    对于新鲜事这个功能来说就是使用GenericRelation来产生一个特殊的外键,它不像models.ForeignKey那样,必须指定一个Model来作为它指向的对象。...怎么从这张操作记录表中得到相应操作的model呢,这就得用到fields.GenericForeignKey,它是一个特殊的外键,可以指向任何Model的实例,在这里就可以通过这个字段来指向类似Post...date = models.DateTimeField(verbose_name="答题日期", auto_now_add=True)   但是,如果我有另外一个需求,也需要与SurveryRecord建立外键关系...是再给上面的表增加一个外键,然后重新修改数据库么?显然是不能,一旦数据库被创建了,我们几乎很少再去修改数据,如果再给其添加额外字段,无疑会带来不必要的麻烦。...总之,如果一个表与其他表有多个外键关系,我们可以通过ContentType来解决这种关联。

    4.4K20

    YashanDB数据完整性

    即在一个表中,不允许多个行在有唯一约束的列(唯一键)或列集(复合唯一键)上具有重复值。唯一键约束适合于任何不允许重复值的列,但唯一约束通常只要求值唯一,并不一定具有实际意义。...# 外键约束当两个表拥有一个或多个公共列时,YashanDB可以通过创建一个外键约束来建立这两个表之间的关联关系。...# 父表的修改与外键的关系删除或更新父表数据可能会破坏外键约束。...UPDATE CASCADE 级联更新(UPDATE CASCADE)是指当父表更新时,对应被引用键值在子表中的所有行也同时按照新值更新。...UPDATE SET NULL 更新置空(UPDATE SET NULL)是指当父表更新时,对应被引用键值在子表中的所有行的外键被设置成NULL。

    5800

    外键的设置

    一、外键的使用条件: ① 两个表必须是InnoDB表,MyISAM表暂时不支持外键 #查看表类型 SHOW TABLE STATUS #查询结果的Engine字段下,一般默认InnoDB类型 ②...test2创建test的索引,在test2下执行,test2为从,test为主 这一步也是博主自己刚开始研究是碰到的最大的坑, 外键引用一直选不了对应字段,可能是你没有设置索引 ③ 外键关系的两个表的列必须是数据类型相似...FOREIGN KEY test(字段2) #外键 REFERENCES test2(字段2) #约束表字段 ON DELETE CASCADE #父表删除子表更新方式 ON UPDATE CASCADE...对父表(表1)的含义: 在父表上进行update/delete以更新或删除在子表中有一条或多条对应匹配行的候选键时,父表的行为取决于:在定义子表的外键时指定的on update/on delete子句...,删除失败;ON UPDATE CASCADE ON DELETE RESTRICT;②父表更新时子表也更新,父表删除时子表匹配的项也删除。

    2.8K30

    MYSQL回顾(表关系相关)

    数据库表有三种关系: 多对一 多对多 一对一 多对一 外键在“多”侧 比如有两个表,分别是书籍表和出版社表。书籍和出版社是典型的多对一关系,即一本书只能由一个出版社出版,一个出版社可以出版多本书。...需要第三张表来建立他们的外键关系,如下: ?...,一个客户有可能变成一个学生,即一对一的关系 关联方式:foreign key+unique 对于多对一的关系而言:关联表中的外键无需指定为unique,因为存在多个记录的外键指向被关联表的同一个记录...但对于一对一的关系而言:为了保证两张表记录的一一对应,需要把关联表的外键约束为unique ?...foreign key(customer_id) references customer(id) #外键的字段一定要保证unique on delete cascade on update cascade

    5.9K20

    外键约束

    大家好,又见面了,我是你们的朋友全栈君。 外键作用:1.保证数据的完整性、一致性,更可靠。      ...2.设置外键约束的两个表之间会有 父子关系 ,即字表中外键字段的取值范围 取决于 父表      3.设置外键一定程度上降低了数据库的速度      4.字表中外键字段的数据类型要与父表中的数据类型一致...                on update cascade); 解除外键:alter table 表名 drop foreign key 外键名;   注意:删除外键后发现 desc...cascade: on delete cascade on update cascade         当主表删除记录或更改被参照字段的值时,从表会级联更新 :这个比较危险,容易级联把数据都删除...set null: on delete set null on update set null         当主表删除记录时,从表外键字段值变成 null         当主表更新主键字段值时,

    1.7K20

    MySQL外键使用详解--Java学习网

    使两张表形成关联,外键只能引用外表中的列的值! (4)建立外键的前提: 两个表必须是InnoDB表类型。 使用在外键关系的域必须为索引型(Index)。...使用在外键关系的域必须与数据类型相似 (5)创建的步骤 指定主键关键字:foreign key(列名) 引用外键关键字:references 外键表名>(外键列名) (6)事件触发限制:on delete...和on update , 可设参数cascade(跟随外键改动), restrict(限制外表中的外键改动),set Null(设空值),set Default(设默认值),[默认]no action...(id) references outTable(id) on delete cascade on update cascade); 说明:把id列 设为外键 参照外表outTable的id列 当外键的值删除...on update cascade); 缺点:在对MySQL做优化的时候类似查询缓存,索引缓存之类的优化对InnoDB类型的表是不起作用的,还有在数据库整体架构中用得同步复制也是对InnoDB类型的表不生效的

    92640

    【MySQL】外键约束介绍

    官方文档: https://dev.mysql.com/doc/refman/5.7/en/create-table-foreign-keys.html 1.外键作用: MySQL通过外键约束来保证表与表之间的数据的完整性和准确性...2.外键的使用条件 1.两个表必须是InnoDB表,MyISAM表暂时不支持外键(据说以后的版本有可能支持,但至少目前不支持) 2.外键列必须建立了索引,MySQL 4.1.2以后的版本在建立外键时会自动创建索引...,但如果在较早的版本则需要显示建立; 3.外键关系的两个表的列必须是数据类型相似,也就是可以相互转换类型的列,比如int和tinyint可以,而int和char则不可以。...ON DELETE、ON UPDATE表示事件触发限制,可设参数: RESTRICT(限制外表中的外键改动) CASCADE(跟随外键改动) SET NULL(设空值) SET DEFAULT(设默认值...SET NULL:表示父表进行更新和删除的时候,子表的对应字段被设为NULL 4.案例演示 以CASCADE(级联)约束方式 1.

    5.1K20

    Mysql外键约束

    如果表A的主关键字是表B中的字段,则该字段称为表B的外键,表A称为主表,表B称为从表。...外键是用来实现参照完整性的,不同的外键约束方式将可以使两张表紧密的结合起来,特别是修改或者删除的级联操作将使得日常的维护工作更加轻松。...外键主要用来保证数据的完整性和一致性 两个表必须是InnoDB表,MyISAM表暂时不支持外键 外键列必须建立了索引,MySQL 4.1.2以后的版本在建立外键时会自动创建索引,但如果在较早的版本则需要显示建立...; 外键关系的两个表的列必须是数据类型相似,也就是可以相互转换类型的列,比如int和tinyint可以,而int和char则不可以; 创建外键语法: 代码如下 复制代码 [CONSTRAINT...如果父表试图UPDATE或者DELETE任何子表中存在或匹配的外键值,最终动作取决于外键约束定义中的ON UPDATE和ON DELETE选项。

    5.9K81

    【重学 MySQL】六十九、揭秘级联约束,让你的数据库关系更智能、更强大!

    级联约束的类型 在MySQL中,级联约束主要通过ON DELETE和ON UPDATE子句来实现,具体类型包括: CASCADE: ON DELETE CASCADE:当主表中的数据被删除时,关联表中的相关数据也会被自动删除...ON UPDATE CASCADE:当主表中的数据被更新时,关联表中的相关数据也会被自动更新。...ON UPDATE SET NULL:当主表中的数据被更新时(实际上这种操作并不常见,因为通常更新操作会保持外键关系的有效性),理论上关联表中的相关数据可以被设置为NULL,但这种用法并不推荐,因为可能会导致数据不一致...NO ACTION和RESTRICT: 两者都表示如果子表中有匹配的记录,则不允许对父表对应候选键进行UPDATE/DELETE操作。它们都会立即检查外键约束。...ON UPDATE CASCADE ); 在上述示例中,child_table的parent_id字段是外键,它引用了parent_table的id字段。

    16510

    MySQL系列:(3)MySQL加强

    作用:约束两种表的数据 语法:CONSTRAINT 外键名 FOREIGN KEY(副表的外键字段) REFERENCES 主表(主表的主键) -- 部门表(主表) CREATE TABLE T_Department...,约束别人的表称为主表,外键设置在副表上的!!!...3)添加数据: 先添加主表,再添加副表 4)修改数据: 先修改副表,再修改主表 5)删除数据: 先删除副表,再删除主表 2.8、级联操作 级联修改: ON UPDATE CASCADE 级联删除: ON...表的每个字段都和表的主键有依赖。 第三范式: 在第二范式基础,要求每张表的主键之外的其他字段都只能和主键有直接决定依赖关系。...按照我个人理解: 第一范式,是对“列”进行约束,每个字段是不可分割的独立单元; 第二范式,是对“表”进行约束,每张表只表达一个意思; 第三范式,是对“表与表之间的关系”进行约束,副表只能包含主表的primary

    74910

    mysql的外键

    在MySQL 3.23.44版本后,InnoDB引擎类型的表支持了外键约束。...外键的使用条件: 1.两个表必须是InnoDB表,MyISAM表暂时不支持外键(据说以后的版本有可能支持,但至少目前不支持); 2.外键列必须建立了索引,MySQL 4.1.2以后的版本在建立外键时会自动创建索引...,但如果在较早的版本则需要显示建立; 3.外键关系的两个表的列必须是数据类型相似,也就是可以相互转换类型的列,比如int和tinyint可以,而int和char则不可以; 外键的好处:可以使得两张表关联...[ON DELETE {RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT}] [ON UPDATE {RESTRICT | CASCADE...ON DELETE、ON UPDATE表示事件触发限制,可设参数: RESTRICT(限制外表中的外键改动) CASCADE(跟随外键改动) SET NULL(设空值) SET DEFAULT(设默认值

    5.5K70

    hibernate系列之四

    一对多的建表原则:在多的一方创建外键指向一的一方的主键; 多对多的建表原则:创建一个中间表,中间表中至少有两个字段作为外键分别指向多对多双方的主键; 一对一建表原则:唯一外键对应:假设一对一中的任意一方为多...,在多的一方创建外键指向一的一方的主键,将外键设置为唯一       主键对应:一方的主键作为另一方的主键; 在hibernate中采用java对象关系描述数据表之间的关系: ?...-- many-to-one:代表多对一: name属性:在实体类中的属性:一的一方的对象的名称; class属性:一的一方的类的全路径 column:表中的外键,在一的一方中配置的外键..." column="lkm_cust_id" cascade="save-update" /> 或者 cascade="delete,save-update...,持久态对象可以自动更新数据库,更新客户的时候会修改一次外键,更新联系人的时候会修改一次外键,所以会产生SQL语句冗余; 解决方案:一方放弃外键的维护,通常交给多的一方去维护,所以一的一方就需要放弃维护

    35630

    Hibernate【inverse和cascade属性】知识要点

    --维护关系的是Set集合,对应employee表--> cascade="save-update" name="set" table="employee" inverse=...employee表的外键并没有数据 ? 这里写图片描述 结论:如果设置控制反转,即inverse=true, 然后通过部门方维护关联关系。...因为它会发现dept是有外键的,而外键又是一个对象来保存着,这个对象在数据库表中并没有存在,因此会抛出异常 //创建对象 Dept dept = new Dept();...多对多关系的时候也是一样的,只不过多对多的关联关系是在中间表中 cascade属性 cascade有这么几个值: none 不级联操作, 默认值 save-update 级联保存或更新...,会把外键的字段设置为NULL,再删除当前一方的记录 设置了级联删除-->把对象有关联关系的记录都删除了 如果cascade和inverse同时设置时: inverse属性优先级是要比cascade要高的

    1.2K40

    【愚公系列】2023年03月 Java教学课程 100-MySQL数据库(约束)

    UNIQUE 唯一约束 用于保证表中某一列的值唯一 NOT NULL 非空约束 用于保证表中某一列的值不能为空 FOREIGN KEY 外键约束 用于建立表与表之间的关系,保证数据的一致性和完整性 FOREIGN...KEY ON UPDATE CASCADE 外键级联更新 在修改主表中的记录时,自动更新与其关联的从表中的记录。...FOREIGN KEY ON DELETE CASCADE 外键级联删除 在关系型数据库中,当一个表的某个记录被删除时,该表中的外键所关联的记录也会被自动删除的过程。...NULL; 6.外键约束 外键约束概念 让表和表之间产生关系,从而保证数据的准确性!...CONSTRAINT 外键名 FOREIGN KEY (本表外键列名) REFERENCES 主表名(主键列名) ON UPDATE CASCADE; -- 添加外键约束,同时添加级联删除 标准语法

    47200

    SQL命令 CREATE TABLE(五)

    在父/子关系中,没有定义的子项顺序。应用程序代码不得依赖于任何特定顺序。 可以定义引用以只读方式装载的数据库中的类的外键约束。...外键定义可能包含两个引用动作子句: ON DELETE ref-action 或 ON UPDATE ref-action ON DELETE子句为引用的表定义了删除规则。...如果是,则更新会导致引用要更新的行的外键字段将更新级联到所有引用行。 表定义不应该有两个不同名称的外键,这两个外键引用相同的标识符-公共字段并执行相互矛盾的引用操作。...根据ANSI标准,如果定义了对同一字段执行相互矛盾的引用操作的两个外键(例如,ON DELETE CASCADE和ON DELETE SET NULL), SQL不会发出错误。...相反,当DELETE或UPDATE操作遇到这些相互矛盾的外键定义时, SQL会发出错误。 下面是一个嵌入式SQL示例,它发出一条使用两个引用动作子句的CREATE TABLE语句。

    1.8K50

    MySql---外键复习

    级联操作 格式 测试级联操作 ---- MySQL外键约束(FOREIGN KEY) MySQL 外键约束(FOREIGN KEY)用来在两个表的数据之间建立链接,它可以是一列或者多列。...外键是表的一个字段,不是本表的主键,但对应另一个表的主键。定义外键后,不允许删除另一个表中具有关联关系的行。 外键的主要作用是保持数据的一致性、完整性。...---- 主表和从表 主表(父表):对于两个具有关联关系的表而言,相关联字段中主键所在的表就是主表。 从表(子表):对于两个具有关联关系的表而言,相关联字段中外键所在的表就是从表。...ON UPDATE CASCADE 级联删除: ON DELETE CASCADE 这里选择修改表的时候,添加外键约束 alter table 表名 add [constraint 约束名] 约束类型...ON DELETE CASCADE; ---- 测试级联操作 父表 从表 修改研发部的部门id,对应员工所属的部门id是否变化 UPDATE depart SET id=3 WHERE

    5.2K30

    MySQL3_外键及查询

    文章目录 MySQL_外键及查询 1.数据的完整性 (1).保证实体的完整 (2).保证域的完整性 (3).引用的完整性 (4).自定义完整性 2.外键 3.实体之间的关系 (1).一对一:主键关系 (...13.插入语句的其它用法 MySQL_外键及查询 1.数据的完整性 1.实体的完整性,一条记录,就是一个实体,如果记录无法区分,则失去了实体的完整性 2.域完整性:如果有两个字段无法区分,则失去了域完整性...).自定义完整性 1.存储过程(相当于python中的自定义函数) 2.触发器 2.外键 外键:从表的公共字段 外键的约束主要是用来保证引用的完整性的,主外键的名字可以不一样,但是数据类型可以一样....foreign key(stuno) references stuinfo(id) on delete cascade on update cascade; #添加外键,并指定外键的名称 alter...ON UPDATE CASCADE; #删除外键 #score_ibfk_1 外键的名字,外键可以有多个 alter table score drop foreign key score_ibfk_

    3K20
    领券