mysql什么时候需要中间表,查询的时候如何使用中间表,最好有个例子,谢谢(*°∀°)=3

mysql什么时候需要中间表,查询的时候如何使用中间表,最好有个例子,谢谢(*°∀°)=3,第1张

你说的中间表是不是临时表

例:如何实现随机更新表里的几条数据。

思路1:先随机查询几条记录

思路2:更新这几条记录。

但是你如果直接写 Update table1 SET ....... where ID in (select ID from table1 ORDER BY RAND() limit 1)

这种情况就会报错。不能再查询时同时对该表进行修改。这个时候就需要将查询语句查出来的表放到临时表。

update table1 Set ...... where ID in(SELECT F.ID FROM (SELECT * FROM table1 ORDER BY RAND() LIMIT 2) F)

数据库update 本身就是先delete再insert;

你所提供的第一种方法其实不好,一个角色,有权限就有记录,没有记录就没有权限,那么修改角色的权限时,也应该用insert和delete,也就是说,只要修改了角色的权限,都是先delete再insert,比如原来有增删改查四个权限,现在改成增和查两个权限,那么应是先删除4条记录,然后再新增2条记录;这样可以少去比较集合的繁琐,效率不会低于你所提。

还可以尝试另外一种方法:角色权限记录总共1000条,任何一个角色对应都存在1000条的权限记录,只是有权限时,标识为1,没有权限时标识为0,那么修改角色时,只需要update权限记录,将标识改为1或0;当新增一个角色时,默认插入1000条记录,同时设置所有标识为0;这个效果不会比2高。但正常使用没有影响。

还可以再尝试一种方法:如增删改查,权限值分别对应 1,2,3,4 ,则当存储3时,表示拥有增和删的权限,当存储2时表示只有删的权限,当存储5时,表示拥有删和改的权限,当存储10时表示拥有全部的增删改查权限。

但是最简单和方便的方法还是用2和3;同时不要用lz的比较集合,而是直接全删再插入的方式。

多对多的关系会生成一张中间表来建立关联,可以对中间表进行配置,以达到满意的效果!

@JoinTable描述了多对多关系的数据表关系。name属性指定中间表名称,joinColumns定义中间表与Teacher表的外键关系。

中间表tea_stu的tea_id列是Teacher表的主键列对应的外键列,inverseJoinColumns定义了中间表与另外一端(Student)的外键关系。

执行了11条SQL,先插入老师的信息,再插入学生的信息,再更新中间表的信息(学生与老师的关系)。

当没有去使用list集合时,此时并没有去执行查询list集合数据,说明是延迟加载!

小结:

1.配置单向多对多的关系时,只需要使用注解@manyTomany

2.多对多会生成中间表来维护双方的关系

3.需要重新配置中间表的信息时,需要使用注解@JoinTable(name="中间表名",joinColumns = @JoinColumn(name = "当前表的外键名"),inverseJoinColumns=@JoinColumn(name = "关联表的外键名"))。

4.添加数据时,都会发送大量的SQL,不仅要添加两张表的数据,还要添加中间表的关系,所以效率低。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/bake/11861510.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存