delete语句中like模糊条件必须写在where子句内,正确格式为delete from table where column like '%value%';错误写法如delete from users like '%test%'语法不合法。

DELETE语句里怎么写LIKE模糊条件
直接在 DELETE 的 WHERE 子句中用 LIKE,和 SELECT 一样,但别漏掉 WHERE——没它就是删全表。
常见错误是写成 DELETE FROM users LIKE '%test%',这语法根本错;正确写法必须带 WHERE:
DELETE FROM users WHERE username LIKE '%admin%';
注意:不同数据库对通配符大小写敏感性不同。MySQL 默认不区分,PostgreSQL 区分,要用 ILIKE(PostgreSQL)或 LOWER() 绕过。
一次删多条时如何确认删的是谁
先用 SELECT 验证匹配逻辑,再删。这是不可跳过的步骤,尤其线上环境。
SELECT id, username FROM users WHERE username LIKE '%temp_%';- 检查返回结果是否符合预期(比如是否误含了
temporary_user这类不该删的) - 确认无误后,把
SELECT换成DELETE,其余不动
别信“我肉眼判断没问题”,模糊匹配容易跨语义匹配(比如 '%user%' 可能匹配到 'superuser' 或 'username_backup')。
LIKE里的通配符怎么避坑
% 匹配任意长度字符,_ 匹配单个字符,但它们本身也是普通字符——如果真想查带百分号的字符串,得转义。
- 查字段值为
'100%'的记录:WHERE remark LIKE '100\%' ESCAPE '\' - MySQL 默认不启用转义,必须显式加
ESCAPE;SQL Server 用ESCAPE '$'等,语法略有差异 - 避免用前导 %(如
LIKE '%abc'),会导致索引失效,大表会很慢
批量删除大量数据要不要分批
单次删几万行以上,建议分批。否则可能锁表太久、日志暴涨、事务超时。
以 MySQL 为例,可用主键范围分片:
DELETE FROM logs WHERE created_at <p>执行多次,每次调整 <code>BETWEEN</code> 范围。PostgreSQL 可用 <code>WHERE ctid IN (SELECT ctid ... LIMIT 1000)</code> 实现类似效果。</p> <p>没主键或时间字段?那就得加临时自增列或用游标,复杂度明显上升——这时候该考虑归档而非硬删。</p>










