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

如何删除SQL数据库中带自增id的最新提交记录?

嘿,这个需求很常见,我来给你梳理两种可行的方案,其中第一种是最稳妥的,尤其适合多用户的网站场景:

方案1:提交时记录当前记录的ID(推荐)

这是最安全的方式,能精准定位到用户刚提交的那条记录,完全不用担心并发情况下删错其他用户的内容。

  • 步骤1:插入数据后获取自增ID
    不同数据库获取刚插入的自增ID的方法略有不同:

    • MySQL/MariaDB:用964898函数,插入后执行SELECT 964898;就能拿到当前会话插入的最新ID
    • SQL Server:用SCOPE_IDENTITY()函数,确保只获取当前会话的插入ID
    • PostgreSQL:在INSERT语句末尾加RETURNING id,比如INSERT INTO your_table (checked) VALUES ('xxx') RETURNING id;直接返回ID
  • 步骤2:把ID传递到展示页面
    拿到这个ID后,你可以把它存在用户的会话(Session)里,或者在展示页面的删除按钮对应的表单里加一个隐藏字段,比如:

    <form action="/delete-record" method="POST">
      <input type="hidden" name="record_id" value="这里填刚获取的ID">
      <button type="submit">删除这条记录</button>
    </form>
    
  • 步骤3:执行删除操作
    当用户点击删除按钮时,后端接收这个ID,用参数化查询执行删除:

    DELETE FROM your_table WHERE id = ?;
    

    这里的?是参数占位符,一定要用参数化查询,绝对不能直接把ID拼接到SQL语句里,防止SQL注入攻击。

方案2:通过MAX(id)删除最新记录(仅单用户场景推荐)

如果因为某些原因没法在插入时获取ID,你可以通过查询最大的id来删除最新记录,但这个方法在多用户同时提交的场景下非常危险——比如用户A提交后,用户B紧接着也提交了,这时候用户A点击删除,会删掉用户B的记录。

对应的SQL语句:

DELETE FROM your_table WHERE id = (SELECT MAX(id) FROM your_table);

再次强调:这个方法只适合单用户使用的系统,多用户场景绝对不要用!

额外注意事项(多用户网站必看)

如果你的网站是多用户的,一定要给表加一个用户标识列(比如user_id),记录每条提交属于哪个用户。删除的时候要同时判断id和user_id,确保用户只能删除自己的记录:

DELETE FROM your_table WHERE id = ? AND user_id = ?;

这样就能彻底避免越权删除的问题。

内容的提问来源于stack exchange,提问作者Rana Zahid Iqbal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 09:06:30