sql 批量根据主键删除数据
时间: 2023-09-13 07:03:26 浏览: 79
可以使用 SQL 的 `IN` 关键字或者 `JOIN` 关键字来批量删除数据。
使用 `IN` 关键字:
```sql
DELETE FROM 表名 WHERE 主键列名 IN (值1, 值2, 值3, ...);
```
例如,删除主键为 1、2、3 的数据:
```sql
DELETE FROM my_table WHERE id IN (1, 2, 3);
```
使用 `JOIN` 关键字:
```sql
DELETE t1 FROM 表1 t1 JOIN 表2 t2 ON t1.主键列名 = t2.主键列名 WHERE 条件;
```
例如,删除主键为 1、2、3,且满足某个条件的数据:
```sql
DELETE t1 FROM my_table t1 JOIN my_table2 t2 ON t1.id = t2.id WHERE t1.id IN (1, 2, 3) AND t2.some_column = 'some_value';
```
注意:在使用 `IN` 关键字时,要确保输入的主键值唯一且不为空,否则可能会删除不该删除的数据。在使用 `JOIN` 关键字时,要确保连接条件正确,否则可能会删除不该删除的数据。建议在执行删除操作前先备份数据。
相关问题
mybatis从前端传来数据联合主键批量删除
可以通过在Mapper接口中定义一个方法,使用@DeleteProvider注解,实现使用Mybatis动态SQL语句进行批量删除。
具体实现方法如下:
1.在Mapper接口中定义一个方法,使用@DeleteProvider注解,指定动态SQL生成器类。
@Mapper
public interface YourMapper {
@DeleteProvider(type = YourDynamicSqlBuilder.class, method = "batchDelete")
int batchDelete(List<Map<String, Object>> dataList);
}
2.实现动态SQL生成器类YourDynamicSqlBuilder,实现batchDelete方法,生成动态SQL语句。
public class YourDynamicSqlBuilder {
/**
* 批量删除
*
* @param map 参数
* @return sql
*/
public String batchDelete(Map<String, Object> map) {
List<Map<String, Object>> dataList = (List<Map<String, Object>>) map.get("list");
StringBuilder sql = new StringBuilder();
sql.append("DELETE FROM your_table_name WHERE ");
for (Map<String, Object> data : dataList) {
sql.append("(");
boolean flag = false;
for (String key : data.keySet()) {
if (flag) {
sql.append(" AND ");
} else {
flag = true;
}
sql.append(key).append("=").append("#{list.").append(key).append("}");
}
sql.append(")");
sql.append(" OR ");
}
sql.delete(sql.length() - 4, sql.length());
return sql.toString();
}
}
3.在controller层中调用批量删除方法。
@Autowired
private YourMapper yourMapper;
...
@RequestMapping(value = "/batchDelete", method = RequestMethod.POST)
@ResponseBody
public String batchDelete(@RequestBody List<Map<String, Object>> dataList) {
int result = yourMapper.batchDelete(dataList);
return result > 0 ? "success" : "fail";
}
注意,此处的dataList为前端传来的参数,其中包含需要删除的数据的联合主键。具体实现根据自己的业务需求进行调整。
mybatis批量删除
你可以使用 MyBatis 的批量删除来执行批量删除操作。以下是一个示例代码片段,展示了如何在 MyBatis 中实现批量删除:
首先,在你的 Mapper 接口中添加一个方法来执行批量删除操作:
```java
void deleteBatch(List<Integer> ids);
```
然后,在对应的 Mapper XML 文件中定义该方法的 SQL 语句:
```xml
<delete id="deleteBatch" parameterType="java.util.List">
DELETE FROM your_table WHERE id IN
<foreach collection="list" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</delete>
```
最后,在你的代码中调用该方法,并传入要删除的 ID 列表:
```java
List<Integer> ids = Arrays.asList(1, 2, 3); // 要删除的 ID 列表
yourMapper.deleteBatch(ids); // 调用批量删除方法
```
这样就可以使用 MyBatis 实现批量删除操作了。请注意,上述示例假设要删除的数据的主键是整数类型,你需要根据实际情况进行调整。