如何删除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
- MySQL/MariaDB:用
步骤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
相关产品推荐
相关产品推荐

