mysql中多表关联删除,怎样做?谢谢...
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql中多表关联删除,怎样做?谢谢...相关的知识,希望对你有一定的参考价值。
1、首先打开终端窗口。mysql -uroot -p进入mysql。
2、进入数据库,然后查看已有的表格,以免名字重复。
3、创建第一个表格,插入数据。
4、创建第二表格,插入数据。
5、创建第三个表格,并且和第一第二个表格关联。
6、INSERT INTO zoo VALUES(1, 1, 2);INSERT INTO zoo VALUES(1, 2, 1);这个时候就能够把他们直接的数据互相关联删除了。比如dog的1和cat的2。
参考技术A1、现在我们以查询员工角色和权限为例:select * from member m left join member_role mr on m.mid=mr.mid left join role r on mr.rid=r.rid。
2、执行sql执行计划,查看mysql的sql执行结果。现在表进行了全表扫描了。
3、现在在所有的右表上建立一个索引:create index mr_index on member_role(mid)。
4、建立好索引之后重新执行sql执行计划。 explain select * from member m left join member_role mr on m.mid=mr.mid left join role r on mr.rid=r.rid。
5、因此索引最好设置在需要进场查询的字段中。
6、尽可能减少join语句中循环的总次数,永远用小结果集驱动大的结果集。当无法保证被驱动表的join条件字段被索引且内存资源充足的前提下,不要吝啬JoinBuffer的设置。
参考技术B mysql中多表关联删除,怎样做?两个表比如delete后面是要删除的表on是关联的字段where是条件
delete a,b from `ecs_goods` as a join `ecs_goods_gallery` as b on a.goods_id = b.goods_id where a.id ='123'
三个表(依次类推)
delete a,b,c from `ecs_goods` as a join
`ecs_goods_gallery` as b on a.goods_id = b.goods_id join
`ecs_goods_cat` as c on a.goods_id = c.goods_id where a.id
='123' 参考技术C 两个表比如delete后面是要删除的表on是关联的字段where是条件
delete a,b from `ecs_goods` as a join `ecs_goods_gallery` as b on a.goods_id = b.goods_id where a.id ='123'
三个表(依次类推)
delete a,b,c from `ecs_goods` as a join
`ecs_goods_gallery` as b on a.goods_id = b.goods_id join
`ecs_goods_cat` as c on a.goods_id = c.goods_id where a.id
='123' 参考技术D 给你举个例子
select * from 表1 join 表2 on 表1.字段名=表2.字段名 join 表3 on 表1.字段名=表3.字段名
你可以用left join ,多一个表 在后面按照规律加上即可
hibernate中多表映射关系配置
1.one-to-many一对多关系的映射配置(在一的一方实体映射文件中配置)
<!-- cascade属性:级联操作属性 save-update: 级联保存,保存客户时,级联保存客户关联的联系人 delete:级联删除,删除客户时,级联删除客户关联的联系人 all:级联保存+级联删除 --> <!-- inverse属性:设置是否不维护关联关系 true:不维护关联 false(默认值):维护关联 --> <!-- 一对多 --> <set name="linkMen" inverse="true" > <!-- 外键列名 --> <key column="lkm_cust_id" ></key> <!-- 该集合是一对多关系表达,关联的对象时linkman --> <one-to-many class="LinkMan" /> </set>
一对多|多对一关系中,放置sql语句冗余.一般选择一的一方放弃维护,inverse属性设置为true.
2.many-to-one 多对一关系映射配置(在多的一方实体映射文件中配置)
<!-- cascade属性:级联操作属性 save-update: 级联保存,保存客户时,级联保存客户关联的联系人 delete:级联删除,删除客户时,级联删除客户关联的联系人 all:级联保存+级联删除 --> <!-- 没有inverse属性: 外键列所在实体,无法放弃维护关联关系. --> <!-- 多对一 --> <many-to-one name="customer" column="lkm_cust_id" class="Customer" ></many-to-one>
3.many-to-many多对多关系映射配置
<!-- 多对多关系配置 table:中间表表名 --> <!-- inverse属性:设置是否不维护关联关系 true:不维护关联 false(默认值):维护关联 --> <!-- cascade属性:级联操作属性 save-update: 级联保存,保存客户时,级联保存客户关联的联系人 delete:级联删除,删除客户时,级联删除客户关联的联系人 all: 级联保存+级联删除 --> <set name="roles" table="sys_user_role" > <!-- 别人引用"我"的外键列名 --> <key column="user_id" ></key> <!-- 表达集合是多对多关系 class属性:表达我与谁是多对多 column属性:表达另外一个外键列名 --> <many-to-many class="Role" column="role_id" ></many-to-many> </set>
多对多关系中,选择一方发起维护关系,放置中间表数据录入重复,根据业务逻辑决定,如商品和订单是多对多关系,订单维护商品放弃维护
以上是关于mysql中多表关联删除,怎样做?谢谢...的主要内容,如果未能解决你的问题,请参考以下文章