12.29

  1. 唯一索引冲突的替换删除(REPLACE INTO,原子操作)

sql
-- 存在则删旧插新,无则直接插入(依赖唯一索引,如name)
REPLACE INTO user (id, name, email)
VALUES (1001, 'Alice', 'alice_new@example.com');

  • REPLACE:先删冲突行再插入,原子性操作,适合需更新唯一键数据的场景。
  1. 按时间窗口+索引的高效删除(大表清理,避免全表扫描)

sql
-- 按创建时间+索引删,每次1000条,低峰期执行
DELETE FROM order_log
WHERE create_time BETWEEN '2025-01-01' AND '2025-03-31'
LIMIT 1000;

  • 条件带索引,分批删避免锁表,适合清理指定时间段的归档数据。
  1. 关联视图删除(MySQL 8.0+,基于视图筛选条件)

sql
-- 先建视图(筛选待删用户)
CREATE VIEW v_inactive_users AS
SELECT id FROM user WHERE last_login < DATE_SUB(NOW(), INTERVAL 180 DAY);

-- 关联视图删除(先查视图验证,再删)
DELETE u FROM user u
JOIN v_inactive_users v ON u.id = v.id;

  • 视图封装筛选逻辑,删除时复用视图条件,适合多场景复用筛选规则。
posted @ 2025-12-29 23:28  喜欢写轻小说的日央  阅读(6)  评论(0)    收藏  举报