SQL之防止误删数据
有以下4中方法降低删错数据的几率:
1.先使用select 语句确定要删除的内容
1.1 先用 SELECT
确认目标数据
1.2 禁止执行无 WHERE
的 DELETE
2.使用逻辑删除,不要使用物理删除
使用update更新删除标志,而不是使用delete物理删除
3.使用事务+手动验证
第一步:开启事务,执行删除语句
product_id | name | stock |
---|---|---|
1 | 手机 | 0 |
2 | 笔记本 | 5 |
3 | 耳机 | 0 |
BEGIN TRANSACTION; -- 开启事务select * from products where stock = 0 ---查看语句筛出来的数据是否是要删除的数据DELETE FROM products WHERE stock = 0; -- 执行删除
第二步:验证删除效果
select * from products ---如果查出来的数据只有product_id=2的数据,则delet语句书写正确的
第三步:提交或回滚
-- 验证后决定提交 COMMIT; -- 此时物理删除真正发生-- 或回滚 ROLLBACK; -- 数据恢复原状
4.设置数据操作权限
开发者禁用
DELETE
权限,仅限 DBA 或运维执行。通过中间层工具审批高风险操作。
PS:数据恢复:
备份+日志
定期备份策略:
每日全量备份 + 每小时 Binlog 增量备份(MySQL)。
测试备份可恢复性(重要!)
- 二进制日志 (Binlog):
- MySQL:通过
mysqlbinlog
工具解析 Binlog,生成反向 SQL(INSERT
替代DELETE
)恢复数据. - PostgreSQL:类似地使用 WAL(Write-Ahead Logging)恢复。
- 时间点恢复 (PITR):利用全量备份 + Binlog/WAL 恢复到误删前的精确时间点。
- MySQL:通过