外键

多表查询(使用连接和外键)

丶灬走出姿态 提交于 2019-12-03 00:35:59
create table class(cid int primary key auto_increment, caption char(4) not null)charset utf8; create table teacher(tid int primary key auto_increment, tname varchar(32) not null)charset utf8; create table student(sid int primary key auto_increment, sname varchar(32) not null, gender enum('male','female','others') not null default 'male', class_id int, foreign key(class_id) references class(cid) on update cascade on delete cascade) charset utf8; create table course(cid int primary key auto_increment, cname varchar(16) not null, teacher_id int, foreign key(teacher_id) references teacher(tid) on

数据库到底需不需要设置外键?

匿名 (未验证) 提交于 2019-12-03 00:25:02
在大型系统中(性能要求不高,安全要求高),最好使用外键(外键可以增强数据库数据的完整性和一致性) 在大型系统中(性能要求高,安全自己控制),不用外键(有外键约束的话,插入字段会进行检查,影响效率) 小系统,最好用外键 用外键要适当,不能过分追求 不用外键而用程序控制数据一致性和完整性时,应该写一层来保证,然后具体应用通过这个层来访问数据库(比如外键约束都转交给dao层) 文章来源: 数据库到底需不需要设置外键?

Day 12

匿名 (未验证) 提交于 2019-12-03 00:21:02
一:按照下列要求,用JavaScript写一个年,月,日的联动菜单。 1、默认显示当前日期; 2、选择年才可以选择月,选择月才可以选择日,并且 2 月的天数要正确; <html> <head> </head> <body> </body> </html> 二:常见的几种约束有哪些?分别代表什么意思?如何使用? 常用的约束有主键约束,外键约束,唯一约束,默认约束 。 1、主键:PRIMARY KEY(主键字段)保证了实体完整性,一个表只有一个主键,但一个主键可以包含多个字段,主键字段不能为空; 2、唯一:UNIQUE(约束字段)保证了实体完整性,一个表有多个唯一约束,一个唯一约束可有包含多个字段; 3、外键:FOREIGN KEY(外键字段),保证了引用完整性,一个表可以有多个外键; 4、默认值:DEFAULT(默认值的表达式或NULL),保证了域完整性,一个表可以有多个默认值约束,但是一个字段只有一个 默认值。 三:数组(Array)和列表(ArrayList)有什么区别?什么时候应该使用 Array 而不是 ArrayList? 1、存储内容比较: Array 数组可以包含基本类型和对象类型, ArrayList 却只能包含对象类型。 Array 数组在存放的时候一定是同种类型的元素。ArrayList 就不一定了 。 2、空间大小比较: Array 数组的空间大小是固定的

[Err] 1701 - Cannot truncate a table referenced in a foreign key constraint

匿名 (未验证) 提交于 2019-12-03 00:19:01
在清空表中数据时报错: [SQL]truncate table ACT_RE_DEPLOYMENT ; [Err] 1701 - Cannot truncate a table referenced in a foreign key constraint (`act`.`ACT_GE_BYTEARRAY`, CONSTRAINT `ACT_FK_BYTEARR_DEPL` FOREIGN KEY (`DEPLOYMENT_ID_`) REFERENCES `act`.`ACT_RE_DEPLOYMENT` (`ID_`)) 报错的意思大概是:不能清空具有外键约束的表*,然后有常识了delete语句,添加了伪条件where 1=1,记得之前有这样的情况然后还是报错, 原因 : [SQL] DELETE FROM ACT_RE_DEPLOYMENT where 1=1; [Err] 1451 - Cannot delete or update a parent row: a foreign key constraint fails (`act`.`ACT_GE_BYTEARRAY`, CONSTRAINT `ACT_FK_BYTEARR_DEPL` FOREIGN KEY (`DEPLOYMENT_ID_`) REFERENCES `ACT_RE_DEPLOYMENT` (`ID_`)

Hibernate的坑

匿名 (未验证) 提交于 2019-12-03 00:18:01
最近接手的一个项目,用的对象关系映射框架是 Hibernate ,虽然以前也有接触过,但只有在实际使用过程中才会更加了解它,言外之意:跳的坑多才能不再掉进坑里。作为之前一直使用 MySql 的我,对 Hibernate 简直是欲与泪先流。下面就说说我碰到的 Hibernate 的坑。 千变万化的需求!不知道哪一天需求改了,如果以后要更新business_id字段时,就会报错以下错误: Cannot add or update a child row : a foreign key constraint fails 出现这种问题,我也是很苦恼,一个后台管理系统,一个app接口,两个有关联的项目,用了不同的映射框架,我真的是醉了~ 网上找了很多方法,很多都太麻烦。对于Hibernate和MySql真的是相爱相杀。 最后我把外键和索引删了,在Hibernate中不使用OneToOne等关联。 当然我注意到MySql的外键约束 ON DELETE、ON UPDATE表示事件触发限制,可设参数: RESTRICT(限 制外表中的外键改动) CASCADE(跟随外键改动)c SET NULL(设空值) SET DEFAULT(设默认值) NO ACTION(无动作,默认的) 如果有什么好的办法能解决这个问题,希望好心人能给出个建议。 通常我们获取一个对象,在修改对象值之后,若要保存到数据库

[ef core ] dz̸ Referential Constraint Action Options

匿名 (未验证) 提交于 2019-12-03 00:14:01
link: https://www.learnentityframeworkcore.com/relationships/referential-constraint-action-options 我的理解是, 当你对数据库中的某个数据进行更新或者删除操作时, 对这个数据关联的数据如何操作的设置. 为了能够更好的理解, 首先搞两个表: 根据图示, author 表中的 author id 是作为 books 表中的外键存在的. 在设置 books 表的外键时的sql 语句为: CONSTRAINT [FK_Books_Authors_AuthorId] FOREIGN KEY ([AuthorId]) REFERENCES [Authors] ([AuthorId]) 也就是说当设置外键时, 我们需要指定一下, 当 Author 表中的 record 被 update 或者 delete 时, books 表中相关联的数据的值如何进行联动的设置. ef core 提供了四个设置, 分别是以下: on update/delete no action 这个设置是默认的, 举个例子就是当你删除 author 表中的某个 author 记录时, 如果你不先将 books 表中外键为该 author 的数据先删除, 你就不能去删除 author 表里这条记录. on update

sqlalchemy 外键

匿名 (未验证) 提交于 2019-12-03 00:13:02
一、表 from sqlalchemy . orm import relationship from sqlalchemy import Column from sqlalchemy import Integer , String class Depart ( Base ): __tablename__ = 'depart' id = Column ( Integer , primary_key = True ) title = Column ( String ( 32 ), index = True , nullable = False ) class Users ( Base ): __tablename__ = 'users' id = Column ( Integer , primary_key = True ) name = Column ( String ( 32 ), index = True , nullable = False ) depart_id = Column ( Integer , ForeignKey ( "depart.id" )) # dp 创建联系,不创建字段 dp = relationship ( "Depart" , backref = 'pers' ) 二、数据操作 # 1. 查询所有用户+所属部门名称 ret = session .

模型层多表查询、神奇的双下划线查询、字段

匿名 (未验证) 提交于 2019-12-03 00:09:02
Django ORM中常用的字段和参数 常用字段 AutoField int自增列,必须填入参数 primary_key=True。当model中如果没有自增列,则自动会创建一个列名为id的列。 IntegerField 一个整数类型,范围在 -2147483648 to 2147483647。(一般不用它来存手机号(位数也不够),直接用字符串存,) CharField 字符类型,必须提供max_length参数, max_length表示字符长度。 DateField DateTimeField 日期时间字段,格式 YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ],相当于Python中的datetime.datetime()实例。 字段参数 null 用于表示某个字段可以为空。 unique 如果设置为unique=True 则该字段在此表中必须是唯一的 。 db_index 如果db_index=True 则代表着为此字段设置索引。 default 为该字段设置默认值。 DateField和DateTimeField auto_now_add 配置auto_now_add=True,创建数据记录的时候会把当前时间添加到数据库。 auto_now 配置上auto_now=True,每次更新数据记录的时候会更新该字段。 关系字段 ForeignKey

[django] 表关联对象及多表查询

匿名 (未验证) 提交于 2019-12-02 23:52:01
表关联对象及多表查询 关系表的数据操作 前面我们在models.py文件中创建了一些关系表 , 接下来我们就来操作这写表里的数据 为了能方便学习,我们进入项目的idle中去执行我们的操作, 通过控制台输入 python manage.py shell 就能进入当前目录下的IDLE 导入关系表 from firstapp . models import Student , StudentDetail , Grade , Course , Enroll 设置 __str__ 通过设置str方法可以使我们在查询某个模型对象的时候, 直观的看到其简要内容, 例如, id和name等: def __str__ ( self ) : return '{}-{}' . format ( self . name , self . num ) 表关联对象的访问 相互关联的表之间的访问方式分为 正向 和 反向 , 下面我们来详细了解一下 什么是正向or反向? 以 ForeignKey / OneToManyField / ManyToManyField 这种类型的字段为参照物, 凡是担有这种字段的表 , 通过其来访问这个外键链接的表, 这种方式就是正向访问 , 反过来就是反向访问 OneToMany 正向 正向:一个模型如果有外键字段,通过这个模型对外键进行操作叫做正向(eg

Django模型层--多表操作

匿名 (未验证) 提交于 2019-12-02 23:52:01
一. 创建模型 表和表之间的关系     一对一、多对一、多对多 ,用book表和publish表自己来想想关系,想想里面的操作,加外键约束和不加外键约束的区别,一对一的外键约束是在一对多的约束上加上唯一约束。   实例:我们来假定下面这些概念,字段和关系   作者模型:一个作者有姓名和年龄。   作者详细模型:把作者的详情放到详情表,包含生日,手机号,家庭住址等信息。作者详情模型和作者模型之间是一对一的关系(one-to-one)   出版商模型:出版商有名称,所在城市以及email。   书籍模型: 书籍有书名和出版日期,一本书可能会有多个作者,一个作者也可以写多本书,所以作者和书籍的关系就是多对多的关联关系(many-to-many);一本书只应该由一个出版商出版,所以出版商和书籍是一对多关联关系(one-to-many)。   模型建立如下: from django.db import models # Create your models here. class Author(models.Model): #比较常用的信息放到这个表里面 nid = models.AutoField(primary_key=True) name=models.CharField( max_length=32) age=models.IntegerField()   def __str__