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

多对多表应该只有delete/insert操作-为什么?

多对多表应该只有delete/insert操作的原因是因为多对多关系是通过中间表来实现的。中间表记录了两个实体之间的关联关系,其中包含了两个外键,分别指向两个实体的主键。当需要建立两个实体之间的关联关系时,只需要在中间表中插入一条记录即可。同样地,当需要解除两个实体之间的关联关系时,只需要从中间表中删除对应的记录即可。

由于多对多关系是通过中间表来实现的,所以在进行关联操作时,只需要对中间表进行插入和删除操作即可。其他的更新操作,如修改关联关系或者删除实体时,都可以通过先删除中间表中的关联记录,再进行相应的操作来实现。

对于多对多关系的应用场景,一个典型的例子是学生和课程之间的关系。一个学生可以选择多门课程,而一门课程也可以被多个学生选择。这种关系可以通过一个中间表来表示,中间表中的记录表示学生和课程之间的关联关系。

在腾讯云的产品中,可以使用云数据库MySQL来管理多对多关系的数据。云数据库MySQL是一种高性能、可扩展的关系型数据库服务,支持标准的SQL语法和多种数据类型。您可以通过使用云数据库MySQL来创建和管理多对多关系的中间表,实现对多对多关系的操作。

更多关于云数据库MySQL的信息,请参考腾讯云官方文档:云数据库MySQL

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

JavaWeb——MyBatis框架之多表查询操作实战案例总结(MyBatis11查询,MyBatis1查询,MyBatis查询)

目录 1 MyBatis的多表查询 1.1 MyBatis的11查询操作 1.2 MyBatis的1查询操作 1.3 MyBatis的查询操作 ---- 多表之间的关系,分为一一、一(...我们这里详细总结下MyBatis中的多表操作,所使用的工程源码会在文章末尾附上。...1 MyBatis的多表查询 1.1 MyBatis的11查询操作 以一个用户和账户的示例说明多表查询的实现步骤: 【需求】:一个用户可有多个账户(多个账户也可属于一个用户),一个账户只能属于一个用户...1.2 MyBatis的1查询操作 此处要实现的是:查询所有用户,同时得到其对应的所有账户信息。...1.3 MyBatis的查询操作 ,以用户和角色的示例说明: 【需求】:一个用户可有多个角色,一个角色又属于多个用户; 【步骤】: 1)建立数据库表:用户表、角色表,使用中间表,实现多关系

1.2K20

JDBC上关于数据库中多表操作多关系和多关系的实现方法

我们知道,在设计一个Java bean的时候,要把这些BEAN 的数据存放在数据库中的表结构,然而这些数据库中的表直接又有些特殊的关系,例如员工与部门直接有一的关系,学生与老师直接又多的关系,那么这些表的关系如何表示呢...首先在建立数据库的时候就应该建立这样的对应关系。...一 ,只要建立两个表就能建立这样的关系,因为你可以把多方的那个表设置一个Foreign Key 属性 ,下面是一个部门和员工的表结构关系 在MySQL 数据库上应该这样建立表结构: create table...String sql = "insert into department values(?,?)"...public List findDepts() { return findDepts(true); } } 的关系 下面以老师和学生的关系来说明这个结构

3.5K70

Mybatis二级缓存,你确定要用么?

只能在【只有单表操作】的表上使用缓存 不只是要保证这个表在整个系统中只有单表操作,而且和该表有关的全部操作必须全部在一个namespace下。 2....在可以保证查询远远大于insert,update,delete操作的情况下使用缓存 这一点不需要多说,所有人都应该清楚。记住,这一点需要保证在1的前提下才可以!...多表操作一定不能使用缓存 为什么不能? 首先不管多表操作写到那个namespace下,都会存在某个表不在这个namespace下的情况。...这点应该很容易理解。 在我看来,就以MyBatis目前的缓存方式来看是无解的。多表操作根本不能缓存。...但是解决多表操作避免脏数据还是有法解决的。解决思路就是通过拦截器判断执行的sql涉及到那些表(可以用jsqlparser解析),然后把相关表的缓存自动清空。但是这种方式缓存的使用效率是很低的。

4.3K72

Mybatis二级缓存_redis二级缓存

在可以保证查询远远大于insert,update,delete操作的情况下使用缓存 这一点不需要多说,所有人都应该清楚。记住,这一点需要保证在1的前提下才可以!...更危险的情况是在XXXMapper.xml做了insert,update,delete操作时,会导致UserMapper.xml中的各种操作充满未知和风险。 有关这样单表的操作可能不常见。...多表操作一定不能使用缓存 为什么不能? 首先不管多表操作写到那个namespace下,都会存在某个表不在这个namespace下的情况。...这点应该很容易理解。 在我看来,就以MyBatis目前的缓存方式来看是无解的。多表操作根本不能缓存。...整篇文章介绍这么也没什么用了。 ---- 五、挽救二级缓存? 想更高效率的使用二级缓存是解决不了了。 但是解决多表操作避免脏数据还是有法解决的。

37320

mybatis的二级缓存_mybatis注解详解

在可以保证查询远远大于insert,update,delete操作的情况下使用缓存 这一点不需要多说,所有人都应该清楚。记住,这一点需要保证在1的前提下才可以!...更危险的情况是在XXXMapper.xml做了insert,update,delete操作时,会导致UserMapper.xml中的各种操作充满未知和风险。 有关这样单表的操作可能不常见。...多表操作一定不能使用缓存 为什么不能? 首先不管多表操作写到那个namespace下,都会存在某个表不在这个namespace下的情况。...这点应该很容易理解。 在我看来,就以MyBatis目前的缓存方式来看是无解的。多表操作根本不能缓存。...整篇文章介绍这么也没什么用了。 ---- 五、挽救二级缓存? 想更高效率的使用二级缓存是解决不了了。 但是解决多表操作避免脏数据还是有法解决的。

32510

MySQL数据篇之多表操作-----保姆级教程

多表操作 外键约束 添加外键 语法 注意 表与表之间的关系 子查询的缺陷 一的关系 一的建表原则 的关系 的建表原则 一一的例子 一一的建表原则 多表案例分析 多表查询...---替代级联删除 join语句中使用USING代替on---键值同名 union联合查询 union all可以查询出所有,不进行去重操作 内连接与外连接的区别 外键约束 作用:保证多表之间的数据完整性...: delete from dept where did=2; 向刚才做的这两个操作(插入一个没有部门的员工和删除一个带有员工的部门),这种情况都是不应该发生的。...---- 一的建表原则 在的一方创建外键指向一的一方的主键 ---- 的关系 一个学生可以选择门课程,一个课程可以被多个学生选择、 的建表原则 需要创建中间表,中间表中至少有两个字段...,分别作为外键指向双方的主键 ---- 一一的例子 一个公司只能有一个注册地址,一个注册地址也只能对应一个公司 一一的建表原则 ---- 多表案例分析 建表: ---- 多表查询

1.2K10

SqlAlchemy 2.0 中文文档(十三)

对于支持多表版本的 UPDATE 的后端,WriteOnlyCollection.update()方法应该可以在集合上工作,就像下面的示例中AccountTransaction对象进行的 UPDATE...对于支持多表版本 UPDATE 的后端,WriteOnlyCollection.update()方法应该可以直接用于集合,就像下面的示例中针对BankAudit.account_transactions...对于支持 UPDATE 的多表版本的后端,WriteOnlyCollection.update() 方法应该集合中工作而无需额外步骤,就像下面的例子中,在BankAudit.account_transactions...要更新或删除集合,其中多表语法不可用,多条件可能会移到 SELECT 中,例如可以与 IN 组合以匹配行。...对于支持 UPDATE 的多表版本的后端,WriteOnlyCollection.update() 方法应该集合中工作而无需额外步骤,就像下面的例子中,在BankAudit.account_transactions

5910

MyBatis 多条件查询、动态SQL、多表操作、注解开发,应有尽有,一网打尽!

="," open="(" close=")">         #{id}     ; 有人会问为啥这里只有一个#{id},我的属性字段不止这一个呀?...三、多表操作 多表之间的关系有一一,一一,,每一种都有建表的原则,以用户-订单模型为例 利用传统的方法进行多表查询无非是通过id来连接表然后封装返回结果,MyBatis中也是如此,我们在...一一 一个用户有一张订单 首先还是那套路,建好实体类,写好接口方法,配置Mapper文件,而多表操作的麻烦点就在于配置文件,这里通过例子细说一下 1.先把表写好 CREATE TABLE orders...3. 多用户多角色 的建表原则是引入一张中间表,用于维护外键,就是一张表通过中间表找到另一张表 和一的模型类似,先在User实体类中增添一个“用户具备哪些角色”的属性private ListroleList...他确实减少了很多硬编码,我每一次新的SQL只需要在标签里改几个属性就可以,只要理清字段与属性的映射关系,在MyBatis中进行多表操作就是一个“对号入座”。

1.1K20

MyBatis多条件查询、动态SQL、多表操作、注解开发详细教程

1.一一 2.一 3. 四、注解开发 ---- MyBatis封装了JDBC通过Mapper代理的方式,以前繁琐的操作通过“属性与字段映射”就简单化解,MyBatis的动态SQL完美展现了...="," open="(" close=")">         #{id}     ; 有人会问为啥这里只有一个#{id},我的属性字段不止这一个呀?...多表之间的关系有一一,一一,,每一种都有建表的原则,以用户-订单模型为例 利用传统的方法进行多表查询无非是通过id来连接表然后封装返回结果,MyBatis中也是如此,我们在Mapper...“一”中增添了封装“”的属性而已,然后稍微调整一下SQL 3. 多用户多角色 的建表原则是引入一张中间表,用于维护外键,就是一张表通过中间表找到另一张表 和一的模型类似,先在User...,顾名思义就是把SQL写在注解里 查询(@Select): 添加(@Insert): 修改(@Update): 删除(@Delete) : ---- ---- 欢迎加入我的知识星球,一起探讨架构

88230

MySQL操作之数据查询语言:(DQL)(四-2)(多表查询)

MySQL MySQL操作之数据查询语言:(DQL)(四-1)(单表操作) 5 MySQL MySQL操作之数据查询语言:(DQL)(四-2)(多表查询) 6 MySQL MySQL操作之数据控制语言:...FK_ID FOREIGN KEY (gid) REFERENCES grade (id); 1.2 外键约束 建立外键约束是为了保证数据的完整性和一致性,但是如果主表中数据被删除或修改,从表中数据应该如何...1.3 删除外键约束 ALTER TABLE 表名 DROP FOREIGN KEY 外键名; 具体: ALTER TABLE student DROP FOREIGN KEY FK_ID; 二、一操作...INTO product(pid,pname,price,cid) VALUES(1,'冰箱',8000,1); 当主表category,id只有1时,从表product的cid,只能添加值为1的数据...DELETE FROM product WHERE cid =1; DELETE FROM category WHERE id =1; 三、操作 需要有1张中间表进行关联。

25030

mysql基本操作命令汇总

student也可以删除表内所有数据 delete from student; 单表查询和多表操作 单表查询:如何从数据库中获取你需要的数据 多表查询:实际开发中,需要进行2张表以上进行操作 单表查询...stu where stu.name="howie"; //为字段取别名,as关键字也可以不写 select name as stu_name,grade stu_grade from student; 多表操作...1.了解外键 2.了解关联关系 3.了解各种连接查询多表的数据 4.了解子查询,会使用各种关键字以及比较运算符查询多表中的数据 外键 外键是指引用另一个表中的一列或者列,被引用的列应该具有主键约束或者唯一性约束...//数据表有三种关联关系,一、、一一 //学生(student)和班级(class)是一关系,添加数据 //首选添加外键约束 alter table student add constraint...from student where cid in(select id from class where id=2); //exists关键字查询,相当于测试,不产生数据,只返回true或者false,只有返回

98420

大数据开发:Hive DML操作入门

如果是分区表,则必须由设定所有分区列的值来指定表的特定分区; 可以在同一个查询中指定多个INSERT子句(也称为多表插入)。多表插入可使数据扫描所需的次数最小化。...通过输入数据只扫描一次(并应用不同的查询操作符),Hive可以将数据插入多个表中; 如果给出分区列值,我们将其称为静态分区,否则就是动态分区; 3、Export data 将查询数据写入到文件系统中。...算术运算符,UDF,转换,文字等,是支持的,子查询是不支持的; 只有符合 WHERE 子句的行才会被更新; 分区列不能被更新; 分桶列不能被更新; 6、Delete DELETE FROM tablename...[WHERE expression] 只有符合WHERE子句的行会被删除。...WHEN NOT MATCHED [AND ] THEN INSERT VALUES Merge 允许根据与源表 Join 的结果目标表执行操作

99320

11. MyBatis注解

我们先围绕一些基本的CRUD来学习,再学习复杂映射多表操作。不过,总体来说,注解开发方式一般只用在简单的SQL,其他复杂的方式一般还是写在 xml 文件中。 # 配置文件 0....MyBatis常用注解 * @Insert:实现新增,代替了 * @Update:实现更新,代替了 * @Delete:实现删除...MyBatis多表操作【了解】 “注解开发的方式写多表查询很少用,因为很麻烦,大概了解一下就好。 ” 注解多表操作是基于嵌套查询来实现 ?...image-20210407002433893 3.2 一查询 需求:查询一个用户,与此同时查询出该用户具有的订单 一查询语句 -- 使用嵌套查询演示 SELECT * FROM `user`...局部延迟加载 不管是一还是 ,在注解配置中都有fetchType的属性 * fetchType = FetchType.LAZY 表示懒加载 * fetchType = FetchType.EAGER

48420

Oracle查询优化-04插入、更新与删除数据

如果在 INSERT 或 UPDATE 操作期间违反了条件,则返回 SQL 错误。 举例说明: 我们创建一个视图,并使用了with check option来限制了视图。...来执行一个条件多表插入; 2、Oracle 服务器通过相应的 WHEN 条件过滤每一个 insert_into_clause,确定是否执行这个 insert_into_clause; 3、一个单个的多表插入语句可以包含最多...条件 INSERT FIRST FIRST和ALL的区别在于当遇到第一个求值为true的子句之后,停止WHEN子句求值,而ALL不论求值是否为true。...注:多表 INSERT 语句上的约束 a、你只能在表而不能在视图上执行多表插入; b、你不能执行一个多表插入到一个远程表; c、在执行一个多表插入时,你不能指定一个表集合表达式; d、在一个多表插入中...,所有的 insert_into_clauses 不能组合指定多于 999 个目列; e、只有当所有insert_into_clauses中的表数据都没有发生更新时,Rollback才会起作用。

1.2K10

MySQL命令,一篇文章替你全部搞定

下面的是常用的关键字的执行顺序: FROM:FROM左边的表和右边的表计算笛卡尔积,产生虚表VT1; ON:虚拟表VT1进行ON筛选,只有那些符合条件的行才会被记录在虚拟表VT2中; JOIN:如果是...:虚拟表VT6进行HAVING条件过滤,只有符合的记录才会被插入到虚拟表VT7中; SELECT:执行SELECT操作,选择指定的列,插入到虚拟表VT8中; DISTINCT:虚拟表VT8中的记录进行去重...触发器只能响应:DELETEINSERT,UPDATE这三个特定操作。 创建触发器?...创建触发器时需要给出最重要的四条信息:1.全局唯一的触发器名;2.触发器关联的表;3.触发器在何时执行(操作执行之前或者之后)4.触发器应该响应的活动(DELETE, INSERT或者UPDATE);...由于触发器只能响应特定的三种类型的操作,因此可创建的触发器也就三种类型:INSERT触发器,DELETE触发器以及UPDATE触发器。

2.6K20

【MySQL数据库】详细讲解MySQL的查询

图片多表查询⭐多表关系在项目开发中,在进行数据库表结构设计时,会根据业务需求以及业务模块之间的关系,分析并设计表结构,由于业务之间相互关联,所以各个表结构之间也存在各种联系,基本分为以下三种一一...)一一一)案例:部门和员工之间的关系 关系:一个部门对于多个员工,一个员工对应一个部门实现在的一方建立外键,指向少的一方的主键 图片案例:学生与课程之间的关系 关系:一个学生可以选修门课程...select * from 表1,表2,……;单表查询图片多表查询图片我们发现,最终的结果有16条,但是是为什么呢图片 因为44=16 course中有4条,student中有4条,44=16 这种现象称为笛卡儿积...update delete selete的任何一个️‍根据查询结果不同,分为查询方式查询结果标量子查询子查询结果为单个值列子查询子查询结果为一列行子查询子查询结果为一行表子查询子查询结果为多行列️‍...anyall子查询返回列表的所有值都必须满足行子查询子查询返回的是一行(可以是列) 常用操作符:= in ,not in 图片表子查询子查询返回的是多行列 常用运算符:in 图片如果大家有不明白的地方

24640

FreeSql v0.11 几个实用功能说明

一、Dto 映射查询 二、IncludeMany 联级加载 三、Where(a => true) 逻辑表达式解析优化 四、SaveManyToMany 联级保存集合属性 五、迁移实体 - 到指定表名...有设置关系的(支持一): fsql.Select().IncludeMany(a => a.Goods).ToList(); 未设置关系的,临时指定关系(只支持一): fsql.Select...解决问题:当实体类导航数据过于复杂的时候,选择关闭联级保存的功能是明智之选,但是此时【】数据保存功能写起来非常繁琐麻烦(因为要与现有数据对比后保存)。....); repo.SaveManyToMany(song, "Tags"); //轻松保存 song 与 tag 表的关联 机制规则与联级保存的【】一样,如下: 我们中间表的保存是完整对比操作,...对外部实体的操作只作新增(注意不会更新) 属性集合为空时,删除他们的所有关联数据(中间表) 属性集合不为空时,与数据库存在的关联数据(中间表)完全对比,计算出应该删除和添加的记录 ---- 五、迁移实体

1.8K10
领券