外键

JPA关联关系

若如初见. 提交于 2019-12-11 14:12:07
1. 单向多对一(使用用户和订单为例) 使用注解: @ManyToOne 是属性或方法级别的注解,用于定义 源实体 与 目标实体 是多对一的关系 属性: targetEntity : 源实体 关联的 目标实体 类型,默认是该成员属性对应的类型,可以缺省 cascade :定义 源实体 和关联的 目标实体 间的级联关系。默认没有级联操作。可选值有: CascadeType.PERSIST :级联新建。若保存实体时,数据库中 没有与该实体相关联的实体 的那条记录,会在 保存实体 的同时 保存与之相关联的实体 CascadeType.REMOVE :级联删除。删除当前实体时,与它有映射关系的实体也会跟着被删除 CascadeType.REFRESH :级联刷新。在更新前重新获取数据。 使用场景:你先获取了数据,但是在保存时数据库的数据被修改了,这时候就需要重新获取一次数据(refresh),然后执行 update 操作 CascadeType.MERGE :级联更新。当当前实体的数据改变,会相应地更新关联的实体的数据 CascadeType.DETACH :级联脱管/游离操作。删除实体因为有外键无法删除时,撤销所有相关的外键关联,然后删除 @since Java Persistence 2.0 :表示从Java Persistence 2.0开始才有的这个可选值 CascadeType

Mysql:外码约束

六眼飞鱼酱① 提交于 2019-12-11 10:26:51
添加主键约束: alter table 表名 add constraint 主键 (形如:PK_表名) primary key 表名(主键字段); 添加外键约束: alter table 从表 add constraint 外键(形如:FK_从表_主表) foreign key 从表(外键字段) references 主表(主键字段); //constraint 在外键名前面 删除主键约束: alter table 表名 drop primary key; 删除外键约束: alter table 表名 drop foreign key 外键(区分大小写); //外键:外键!=外键字段 //show create table bi_sai_xiang_mu(该表名)来找到这个约束的字段名,一般形如xx_ibfk[_1]; 添加列: alter table 表名 add column 列名 varchar(30); 删除列: alter table 表名 drop column 列名; 修改列名: alter table 表名 change oldcolname newcolname int; 修改列属性: alter table 表名 modify 列名 varchar(22); 来源: CSDN 作者: 俗今见 链接: https://blog.csdn.net/weixin

在论坛中出现的比较难的sql问题:10(删除多表中的同一个外键)

社会主义新天地 提交于 2019-12-11 00:10:24
原文: 在论坛中出现的比较难的sql问题:10(删除多表中的同一个外键) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了。 所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路。 1、求助!SQLServer如何删除多表(10表以上)中的同一个外键。 http://bbs.csdn.net/topics/390633551 最近在做一个OA系统,用SQLServer2008数据库。系统里有个删除员工的功能,但是考虑到其他表中有员工表的外键,删除时应该将其他表中相关的记录全部删除,请问如何写语句? 比如员工表是OA_User,员工编号Uid,数据库中最少有10张表里有Uid外键,请问如何删除其他表中的相关记录? create table OA_User(Uid int primary key ,uname varchar(20)) create table OA_tb(id int identity(1,1)primary key ,Uid int foreign key references OA_User(Uid) on delete cascade --级联删除) insert into OA_Uservalues(1,'张三'), (2,'李四') insert into OA

CodeFirst-常用特性标识详解

放肆的年华 提交于 2019-12-10 18:26:27
#设置外键 PS:当外键属性设置为[Required]时,默认设置级联删除 #内置特性 public class User { /// <summary> /// DatabaseGeneratedOption: /// Computed:在插入或更新行时,数据库将生成值。 /// Identity:在插入行时,数据库将生成值。 /// None:数据库不生成值(主键不自增)。 /// </summary> [ Key , DatabaseGenerated ( DatabaseGeneratedOption . Identity ) ] public int ID { get ; set ; } public string Name { get ; set ; } public string Address { get ; set ; } //使用virtual使得改字段可以使用懒加载 //ICollection代表一种集合。将集合指定为ICollection允许您在代码中使用任何类型的集合来实现 ICollection接口 //如果要实现延迟加载,则需要ICollection [ InverseProperty ( "BookUser" ) ] public virtual ICollection < UserBook > BookList { get ; set ; } /

ubuntu下mysql的Cascade,NO ACTION,Restrict,SET NULL

﹥>﹥吖頭↗ 提交于 2019-12-10 16:05:08
On Delete和On Update都有Restrict,No Action, Cascade,Set Null属性。现在分别对他们的属性含义做个解释。 ON DELETE restrict(约束) :当在父表(即外键的来源表)中删除对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除。 no action: 意思同restrict.即如果存在从数据,不允许删除主数据。 cascade(级联): 当在父表(即外键的来源表)中删除对应记录时,首先检查该记录是否有对应外键,如果有则也删除外键在子表(即包含外键的表)中的记录。 set null: 当在父表(即外键的来源表)中删除对应记录时,首先检查该记录是否有对应外键,如果有则设置子表中该外键值为null(不过这就要求该外键允许取null) ON UPDATE restrict(约束) :当在父表(即外键的来源表)中更新对应记录时,首先检查该记录是否有对应外键,如果有则不允许更新。 no action: 意思同restrict. cascade(级联): 当在父表(即外键的来源表)中更新对应记录时,首先检查该记录是否有对应外键,如果有则也更新外键在子表(即包含外键的表)中的记录。 set null: 当在父表(即外键的来源表)中更新对应记录时,首先检查该记录是否有对应外键,如果有则设置子表中该外键值为null

MySQL外键约束类型

折月煮酒 提交于 2019-12-10 16:04:55
MySQL中,数据表使用InnoDB引擎的时候,是支持外键的。而外键的作用主要就是保持数据的一致性以及相应的一些级联操作。 而外键的主要约束有以下4个种: 约束类型 含义 RESTRICT 拒绝删除或者更新父表。 CASCADE 从父表中删除或更新对应的行,同时自动的删除或更新自表中匹配的行 SET NULL 从父表中删除或更新对应的行,同时将子表中的外键列设为空。注意,这些在外键列没有被设为NOT NULL时才有效。 NO ACTION InnoDB拒绝删除或者更新父表。 在使用外键的时候,可以适当的选择所需的约束类型使用。 来源: oschina 链接: https://my.oschina.net/u/1046928/blog/541810

MYSQL_使用外键约束(constraint)或触发器(trigger)来进行级联更新、删除

别说谁变了你拦得住时间么 提交于 2019-12-10 14:56:38
我们通常有这样的需求:删除表Table 1中记录,需要同时删除其它表中与Table 1有关的若干记录。 举个例子: 现有2个实体- 麻将机 学生、课程,1种联系- 成绩 分别创建 学生表 students, 课程表course,成绩表score --创建 学生表 students CREATE TABLE IF NOT EXISTS `students` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(32) DEFAULT "", PRIMARY KEY (`id`) ) ENGINE=InnoDB; --插入若干记录 INSERT INTO `students` (`id`, `name`) VALUES (1, "john"), (2, "lucy"), (4, "jack"); --创建课程表 CREATE TABLE IF NOT EXISTS `course` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(32) DEFAULT "", PRIMARY KEY (`id`) ) ENGINE=InnoDB; -- 插入数据若干 INSERT INTO `course` (`id`, `name`) VALUES (1, "english"),

数据库错误Cannot delete or update a parent row: a foreign key constraint fails

删除回忆录丶 提交于 2019-12-10 11:32:00
问题描述: 删除数据库表中一条数据的时候,报错Cannot delete or update a parent row: a foreign key constraint fails。 原因: 此数据库表和其他数据库表有关联,再删除的时候会检查表之间的关联关系,从而导致无法删除。 数据库中的解决方法: SET foreign_key_checks = 0; // 先设置外键约束检查关闭 drop table table1; // 删除表,如果要删除视图,也是如此 SET foreign_key_checks = 1; // 开启外键约束检查,以保持表结构完整性 可以用 show VARIABLES like "foreign%"; 检查外键配置项。 off表示关闭状态;on表示开启状态 如果要将检测外键开启:SET foreign_key_checks = 1; 来源: https://www.cnblogs.com/zzgyq/p/12015166.html

Serializers 序列化组件

无人久伴 提交于 2019-12-10 03:03:46
为什么要用序列化组件 当我们做前后端分离的项目~~我们前后端交互一般都选择JSON数据格式,JSON是一个轻量级的数据交互格式。 那么我们给前端数据的时候都要转成json格式,那就需要对我们从数据库拿到的数据进行序列化。 接下来我们看下django序列化和rest_framework序列化的对比~~ Django的序列化方法 class BooksView(View): def get(self, request): book_list = Book.objects.values("id", "title", "chapter", "pub_time", "publisher") book_list = list(book_list) # 如果我们需要取外键关联的字段信息 需要循环获取外键 再去数据库查然后拼接成我们想要的 ret = [] for book in book_list: pub_dict = {} pub_obj = Publish.objects.filter(pk=book["publisher"]).first() pub_dict["id"] = pub_obj.pk pub_dict["title"] = pub_obj.title book["publisher"] = pub_dict ret.append(book) ret = json.dumps

Django的models的分层设计(避免循环引用)

主宰稳场 提交于 2019-12-09 22:00:39
在一个Django项目中,通常都会有多个app,在每个app中都有一个models.py文件用来存放相应的模型类(模型类是数据库表的映射)。而在模型类与模型类之间很有可能会存在某种关联,比如外键关联,这时,相关联的模型类很有可能不在同一个models.py文件中,很有可能是跨越了app来关联的。这时,如果app1中的models.py文件引用了app2中的models.py文件来建立外键关联,而app2中的models.py文件也恰好引用了app1中的models.py文件来进行外键关联,这时就发生了循环引用,在Python中循环引用是会报错的。 如上图所示,假设在一个Django项目中两个app,分别是users(用户相关),goods(商品相关),在users的models.py文件中有两个用户相关的模型类,分别是Users(用户信息),UserOrders(用户的订单信息),在goods的models.py文件中有两个商品相关的模型类,分别是Goods(商品信息),GoodComments(商品的评论)。到这里,我们可以想到,UserOrders肯定会和Goods通过外键关联起来,而GoodComments也肯定会和Users通过外键关联起来,这样他们就进行了循环引用。 因此,我们将采取一种方法来解决这种循环引用的问题,就是标题提到的分层设计,分层我们指的是将app进行分层