mysql delete两种关联删除方式

基本格式:

 DELETE t1 FROM t1,t2 WHERE t1.id=t2.id 或 DELETE FROM t1 USING t1,t2 WHERE t1.id=t2.id 
示例应用:

DELETE coupon FROM coupon,member WHERE coupon.mem_no=member.reg_no AND coupon.`status`=0 AND coupon.`batch_no`='yaoqingpengyou001' AND member.`mobile` IN (
182xxxx9886
)

//关联用户表,根据手机号码查询该会员号对应的券(批次号为yaoqingpengyou001且未使用status=0)删除。

DELETE FROM coupon USING coupon,member WHERE coupon.mem_no=member.reg_no AND coupon.`status`=0 AND coupon.`batch_no`='yaoqingpengyou001' AND member.`mobile` IN (
182xxxx9886

转载于:https://www.cnblogs.com/simpledev/p/6291202.html

### MySQL批量删除多条记录的语法示例 在MySQL中,`DELETE FROM`语句可以通过多种方式实现批量删除。以下是几种常见的方法及其具体应用。 #### 方法一:基于条件的批量删除 通过指定 `WHERE` 条件来删除符合条件的所有记录。这种方法适用于需要一次性删除特定范围内的数据的情况[^1]。 ```sql DELETE FROM tbl_name WHERE where_definition; ``` 例如,假设有一个名为 `users` 的表,其中存储了大量的用户信息,现在希望删除年龄大于等于50岁的所有用户: ```sql DELETE FROM users WHERE age >= 50; ``` 此命令会删除所有满足 `age >= 50` 条件的记录,并返回被删除的记录数。 --- #### 方法二:分批次删除大数据集 当需要删除大量的记录时,直接使用单一的 `DELETE` 语句可能导致性能下降甚至锁定表资源。为了避免这种情况,可以采用分批删除方式[^2]。 以下是一个典型的分批删除脚本示例: ```sql SET @done = 0; WHILE @done = 0 DO DELETE FROM users WHERE condition LIMIT 1000; -- 每次只删除1000条记录 SET @done = ROW_COUNT(); -- 如果本次删除影响的行数为0,则结束循环 END WHILE; ``` 上述脚本通过设置每次删除的最大行数(如1000),逐步完成整个删除过程,从而减少单次操作的压力并提升整体性能。 --- #### 方法三:利用子查询进行复杂条件下的批量删除 有时可能需要根据另一个表的数据或者复杂的逻辑来进行删除操作。此时可以借助子查询来构建更灵活的 `WHERE` 条件[^3]。 例如,假设有两个表 `orders` 和 `customers`,我们想删除那些在过去一年没有任何订单的客户: ```sql DELETE FROM customers WHERE customer_id NOT IN ( SELECT DISTINCT order_customer_id FROM orders WHERE order_date > DATE_SUB(CURDATE(), INTERVAL 1 YEAR) ); ``` 这条语句先通过子查询找出过去一年有订单的客户ID列表,再将其排除在外以删除剩余的目标客户记录。 --- #### 方法四:多表联合删除 如果涉及多个表之间的关联关系,在某些情况下可以直接在一个 `DELETE` 语句中处理跨表的操作[^5]。 下面展示了一个例子,说明如何同时从两张或多张表中移除相关联的信息: ```sql -- 方式A (FROM 删除法) DELETE a, b FROM table_a AS a INNER JOIN table_b AS b ON a.id = b.a_id WHERE some_condition; -- 方式B (USING 删除法) DELETE FROM a USING table_a AS a INNER JOIN table_b AS b ON a.id = b.a_id WHERE some_condition; ``` 这两种写法都可以达到相同的效果——即依据两表间的连接规则同步清理掉对应的冗余项。 --- #### 性能优化建议 为了进一步改善大规模删除场景下的表现效果,还可以考虑以下几个方面[^4]: - **合理运用索引**:确保所使用的字段已建立适当类型的索引; - **避免全表扫描**:始终明确提供精确的过滤条件; - **控制事务大小**:将大任务拆分为若干个小单元提交; - **尝试 TRUNCATE 替代方案**:若目标是清空整张表格而非部分记录,则优先选用更快捷高效的 `TRUNCATE TABLE` 命令代替常规 `DELETE`。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值