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

添加新记录时自动将旧记录的last字段设为0的实现方案

实现新增记录时自动将旧记录last字段设为0的方案

方案一:手动事务包裹(适合可控场景)

通过事务保证更新和插入操作的原子性,避免出现部分执行的异常情况。以MySQL为例:

START TRANSACTION;
-- 先将所有已有记录的last设为0
UPDATE your_table SET last = 0;
-- 插入新记录(若表结构已给last设默认值1,此处可省略last字段)
INSERT INTO your_table (column1, column2) VALUES ('val1', 'val2');
COMMIT;

注意:如果表数据量极大,全表UPDATE会占用大量资源并锁表,要评估性能影响后再使用。

方案二:数据库触发器(自动处理)

创建触发器让系统在每次插入新记录时自动触发更新操作,无需手动编写事务逻辑。

MySQL 示例:

DELIMITER //
CREATE TRIGGER reset_old_last BEFORE INSERT ON your_table
FOR EACH ROW
BEGIN
    UPDATE your_table SET last = 0;
END //
DELIMITER ;

PostgreSQL 示例:

先创建触发器函数,再绑定触发器:

CREATE OR REPLACE FUNCTION reset_old_last_func()
RETURNS TRIGGER AS $$
BEGIN
    UPDATE your_table SET last = 0;
    RETURN NEW;
END;
$$ LANGUAGE plpgsql;

CREATE TRIGGER reset_old_last_trigger BEFORE INSERT ON your_table
FOR EACH STATEMENT EXECUTE FUNCTION reset_old_last_func();

注意:触发器会在每次INSERT时自动执行,同样要注意大数据量下的全表更新性能问题。如果数据量较大,建议改用时间戳标记最新记录的方式(比如新增created_at字段,查询时取created_at最大的记录作为最新),避免全表更新的开销。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 21:14:59