You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQLite中LIKE子句搭配DELETE语句无法生效问题求助

DELETE用LIKE删不了数据但SELECT能查到?试试这几个排查点
  • 先确认事务有没有提交
    很多数据库(比如MySQL InnoDB、PostgreSQL)默认不会自动提交事务。你执行完DELETE后,得手动提交才能让修改生效。用Python的话,执行完SQL后要加一行conn.commit():

    cur.execute("DELETE FROM urls WHERE url LIKE 'https%';")
    conn.commit()  # 必须加这个,不然修改只会在当前会话临时生效,关闭就回滚
    

    你之前能查到数据,可能是因为当前会话还没提交,数据处于未确认状态,实际没被删除。

  • 检查LIKE的大小写匹配问题
    有些数据库的LIKE是大小写敏感的,比如PostgreSQL默认区分大小写。如果你的url里有HTTPS://xxx这种大写开头的,'https%'就匹配不到,但SELECT可能因为你用了不区分大小写的配置才查到。可以改成不区分大小写的写法:

    -- MySQL 强制不区分大小写
    DELETE FROM urls WHERE url LIKE 'https%' COLLATE utf8_general_ci;
    -- PostgreSQL 直接用ILIKE
    DELETE FROM urls WHERE url ILIKE 'https%';
    
  • 看看url字段有没有隐藏字符
    有时候url开头可能有空格、制表符这类看不见的字符,导致LIKE 'https%'匹配不到,但SELECT显示的时候你看不到这些字符。可以先查一下字段的实际长度:

    SELECT url, LENGTH(url) FROM urls WHERE url LIKE 'https%';
    

    如果长度比你看到的长,说明有隐藏字符,这时候可以用TRIM处理后再匹配:

    DELETE FROM urls WHERE TRIM(url) LIKE 'https%';
    
  • 确认操作的是同一个表
    别小看这个,有时候可能不小心连了不同的数据库,或者表名大小写搞错了(比如Urls和urls在区分大小写的数据库里是两个不同的表),导致DELETE和SELECT操作的不是同一批数据。

内容的提问来源于stack exchange,提问作者Matblanket

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 14:21:02