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

MyBatis之级联——一对多关系

上次我们讲到了MyBatis的一对一关系的表示,简单回顾一下一对一关系就是一个学生只有一个学生证。那么什么是一对多关系呢?一个学生有多个课程这就是一对多的关系。...数据库的ER图如下(因为对数据库还处于菜鸟阶段……所以可能ER图绘制有误,但不影响我们讲解MyBatis一对多关系级联): ? 再看看数据库的物理模型包含哪些字段: ?...在使用MyBatis为我们提供的级联前,我们先来梳理一下从逻辑上是怎么一步一步查询出来的。...t_course_score where student_id = #{id} 15 16 最后一步,也就是第1步,才进入正题MyBatis的一对多collection级联关系...collection就是MyBatis为我们提供的第二个级联关系——一对多。

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

    MyBatis之级联——一对一关系

    此篇是介绍MyBatis是如何实现数据库中一对一关系的,我们就暂且先介绍一对一关系。所谓一对一关系其实在生活中很常见,比如一个学生有且只对应一个属于他的学生证。下面就是我们的所假设的数据库物理模型。...我们大可不必用这种low的方式,这里的根据id查询学生信息(包括学生证信息)其实就是一个数据库的1对1级联关系,我们可以用inner join的sql语句来查询,当然我们也可以使用Mybatis为我们提供的...association一对一级联。...sex from t_student where id = #{id} 14 15 还记得Student类中有一个SelfCard类的引用吧,它们是一对一的级联关系...好了,到现在为止,我们就实现了数据库中的一对一级联关系。接下来就是数据库中一对多级联

    60850

    MySQL·关系模型

    关系模型 外键 在 students 表中,通过 class_id 的字段,可以把数据与另一张表关联起来,这种列称为外键。...通过定义外键约束,关系数据库可以保证无法插入无效的数据。即如果 classes 表不存在 id=99 的记录,students 表就无法插入 class_id=99 的记录。...索引 索引是关系数据库中对某一列或多个列的值进行预排序的数据结构。通过使用索引,可以让数据库系统不必扫描整个表,而是直接定位到符合条件的记录,这样就大大加快了查询速度。...在设计关系数据表的时候,看上去唯一的列,例如身份证号、邮箱地址等,因为他们具有业务含义,因此不宜作为主键。但是,这些列根据业务要求,又具有唯一性约束:即不能出现两条记录存储了同一个身份证号。...无论是否创建索引,对于用户和应用程序来说,使用关系数据库不会有任何区别。

    80530

    MySQL为什么取消了Query Cache?

    本文转载自“MySQL解决方案工程师”公众号,作者:徐轶韬 ---- MySQL之前有一个查询缓存Query Cache,从8.0开始,不再使用这个查询缓存,那么放弃它的原因是什么呢?...MySQL查询缓存是查询结果缓存。它将以SEL开头的查询与哈希表进行比较,如果匹配,则返回上一次查询的结果。...随着技术的进步,经过时间的考验,MySQL的工程团队发现启用缓存的好处并不多。 首先,查询缓存的效果取决于缓存的命中率,只有命中缓存的查询效果才能有改善,因此无法预测其性能。...数据写的越多,好处越少 缓冲池中容纳的数据越多,好处越少 查询越复杂,扫描范围越大,则越受益 MySQL8.0取消查询缓存的另外一个原因是,研究表明,缓存越靠近客户端,获得的好处越大。...综合以上原因,MySQL8.0不再提供对查询缓存的支持,如果用户从5.7版本升级至8.0,考虑使用查询重写或其他缓存。 全文完。 Enjoy MySQL 8.0 :)

    4.8K31

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

    【重学 MySQL】六十九、揭秘级联约束,让你的数据库关系更智能、更强大! 在MySQL数据库中,级联约束是维护数据完整性和一致性的重要机制。...在MySQL的实际操作中,ON UPDATE SET NULL并不是一种常见的级联更新方式。...然而,在MySQL的InnoDB存储引擎中,SET DEFAULT并不被支持。 另外,还有一个DEFAULT选项,它实际上是级联约束的默认级别,表示不采取任何特定的级联操作。...级联约束的实现方式 在MySQL中,可以在创建或修改表时使用FOREIGN KEY约束来实现级联约束。...综上所述,级联约束是MySQL中维护数据完整性和一致性的重要机制。通过合理使用级联约束,可以让数据库关系更智能、更强大。然而,也需要注意其潜在的性能开销和复杂性增加等问题,并在实际应用中谨慎使用。

    12610

    Mysql 双主与级联复制结合架构

    才能支撑读的压力 这时候,Master就会比较吃力了,因为仅仅连上来的Slave IO线程就比较多了,这样写的压力稍微大一点时,Master端因为复制就会消耗较多的资源,很容易造成复制的延时 解决方案:级联复制架构...首先通过少数几台MySQL从Master来进行复制,这几台机器称为第一级Slave集群,然后其他的Slave再从第一级Slave集群来进行复制,如果有需要,可以继续往下增加更多层次的复制。...这样,很容易就控制了每一台MySQL上面所附属Slave的数量 如果条件允许,建议通过拆分成多个复制集群来解决,因为Slave越多,整个集群的写IO总量也就会越多,增加复制的级联层次,同一个变更传到最底层的...Slave需要经过的MySQL也会更多,同样可能造成延时较长的风险 Dual Master与级联复制结合架构 级联复制在一定程度上能解决Master因为所附属的Slave过多而成为瓶颈的问题,但是它并不能解决人工维护和出现异常需要切换时可能存在重新搭建...这样就很自然地出现了Dual Master与级联复制结合的架构 这种方式最大的好处就是既可以避免主Master的写操作不会受到Slave集群的复制所带来的影响,同时主Master须要切换的时候也基本上不会出现重搭

    1.5K50

    MYSQL回顾(表关系相关)

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

    5.9K20

    MySQL架构备份之M-S-S级联备份

    M--S1--S2 级联复制 master—>slave1—>slave2 master需要开启二进制日志 中间的slave1也需要打开二进制日志,但是它默认不把应用master的操作记录到自己的二进制日志...必须开启二进制日志 2、slave2必须开启中继日志 3、master和slave1和slave2的server-id必须不一样  范围(2^23-1) 4、master和slave的初始数据一致 M--S1--S2级联架构操作步骤...* [root@master DB]# scp /tmp/mysql.tar.gz 192.168.1.114:/tmp [root@master DB]# scp /tmp/mysql.tar.gz..." | mysql -p123 示例master上面有业务数据 4、在master上面创建对slave1授权用户及查看binlog信息 1>创建授权用户 mysql> grant replication....000017', master_log_pos=425; mysql> start slave; mysql> show slave status \G; Slave_IO_Running

    29320

    MySQL_关系的码,关系的完整性

    [toc] 关系的码 候选码 候选码是能够唯一标识关系中某一个元组的一个属性或属性集,也叫候选键 如: 学生关系中,学号可以唯一标识学生,班级+姓名也可以唯一标识一个学生,学号和(班级,姓名)都是候选码...R1,R2,其中属性集X是R1的非主码属性,但X是R2的主码,则称X是R1的外码(也叫外键、外部关系键),R1为参照关系,R2为被参照关系 外码的取值是由被参照的关系的主码的域决定的,也就是外码的域来自...因此学号或课程号不能单独作为主码 而学号和课程号分别是学生和课程的主码,则选课关系中,学号和课程号都是外码,并且学号和课程号是选课关系中的主属性 关系的完整性 为了维护关系数据库中数据与现实的一致性(...有如下三类 实体完整性:主码的值不能为空或部分为空 参照完整性:外码来自被参照关系的主码,且可以为空,但作为被参考的关系的主码不能为空(外码可以为空时,外码通常是非主属性) 用户自定义完整性:针对某一具体关系数据的约束条件...,第二,在构建选课关系用学号更便捷

    7810

    关于MySQL拓扑关系的梳理

    这是学习笔记的第 2227 篇文章 关于MySQL的拓扑关系,最近是比较困扰我的,主要是因为最近在思考重构元数据层面的一些东西,发现原来的一些设计方式已经不能够支持现在的业务特点了。...级联实例的关系不好体现 基于双主模式的复制拓扑难以体现 读写分离的关系不好体现 不支持跨机房容灾的复制关系 所以这些问题抛出来,也算是自我革命,整体上来看这种关系的维护是比较复杂的,如果碰到一些略微复杂的场景...MySQL 8.0有个特性叫做replicaSet,这个特性的名字给了我新的启发,那就是我们可以按照复制集的角度去重新看待原来的拓扑关系。...比如复制集repl-001,包含一主两从,repl-003复制集,它是一主一从,同时包含一套级联复制环境,可以从repl-004得到明细的复制关系,repl-002是单实例环境,没有从库。...不支持域名 一主多从的关系不够清晰 级联实例的关系不好体现 基于双主模式的复制拓扑难以体现 读写分离的关系不好体现 不支持跨机房容灾的复制关系 其实2,3,4,6是可以支持的,而对于域名服务的部分,目前看和复制拓扑没有直接的关系

    1.4K20

    【Blog.Core开源】关于实现复杂级联关系数据迁移的思考

    比如多个级联关系中,到底要不要以自增主键id为唯一标识?...在写迁移的过程中,我开始思考一个问题,为什么要这么复杂呢,有没有其他方案呢,这里先简单说下如果涉及到表数据迁移,特别是复杂级联关系数据的迁移应该怎么办?...1、万能的String字符串做标识 曾经很多次,想对整个项目做一次大改,把所有的表主键都用Guid,直接用字符串来做唯一标识,然后表与表之间通过这个字符串做关联,这样数据做迁移关系的时候,就可以很好的解决自增...,并且有父Pid和接口Mid; ModulePermission关系表:可以做多对多(目前用不到,舍弃); Role表:存放所有角色列表,主键Rid; RoleModulePermission表:三表主键关系表...我的方案就是通过代码的方案,用树的形式,导入,这样用新的pid做关系键就能实现目的。

    42030

    MySQL表与表之间的关系

    表与表之间的关系 表1 foreign key 表2 则表1的多条记录对应表2的一条记录,即多对一 利用foreign key的原理我们可以制作两张表的多对多,一对一关系 多对多: 表1的多条记录可以对应表...表2的多条记录也可以对应表1的一条记录 一对一: 表1的一条记录唯一对应表2的一条记录,反之亦然 分析时,我们先从按照上面的基本原理去套,然后再翻译成真实的意义,就很好理解了 1、先确定关系...00',4),('linux','08:30:00',1),('linux','08:30:00',7); 运行结果 图片 多对多 书和作者(我们可以再创建一张表,用来存book和author两张表的关系...-- 建立user和usergroup的关系表 create table user2usergroup( id int not NULL UNIQUE auto_increment, user_id...user2usergroup(user_id,group_id) values(1,1),(1,2),(1,3),(1,4),(2,3),(2,4),(3,4); -- 建立user和host的关系

    3.5K10
    领券