删除
大约 1 分钟
删除
Sea-ORM 提供“硬删除(物理删除)”API。若你的系统采用“软删除”,请参考下一节。
单条删除
use sea_orm::EntityTrait;
let aff = entity::sys_user::Entity::delete_by_id(id).exec(&db).await?;
let rows = aff.rows_affected;
条件批量删除
use sea_orm::{EntityTrait, ColumnTrait, QueryFilter};
let aff = entity::sys_user::Entity::delete_many()
.filter(entity::sys_user::Column::Status.eq(0))
.exec(&db).await?;
关联删除与外键
- 若数据库外键设置
ON DELETE CASCADE
,则删除父记录会级联删除子表。 - 若未设置级联,需在事务中先删除子表再删父表:
use sea_orm::TransactionTrait;
db.transaction(|txn| {
Box::pin(async move {
entity::sys_user_role::Entity::delete_many()
.filter(entity::sys_user_role::Column::UserId.eq(id))
.exec(txn).await?;
entity::sys_user::Entity::delete_by_id(id).exec(txn).await?;
Ok::<_, sea_orm::DbErr>(())
})
}).await?;
安全提示
- 删除前校验“是否允许删除”(例如存在业务关联、保护管理员账号等)
- 操作留痕:记录操作日志(谁/何时/目标/是否成功)
- 大量删除建议分页或按范围分批,避免长事务
与软删除的取舍
- 硬删除:数据永久移除,简单直接
- 软删除:保留数据用于审计/恢复,但查询需默认过滤
deleted_at is null