我想跟踪用户的更改历史记录,以便每当他更改他的个人资料时,我都需要获取旧数据并存储在历史记录中并使用新数据进行更新。
我可以使用 aselect
来获取旧数据,然后使用insert
历史记录,最后使用 aupdate
来更改数据。
我可以在不使用存储过程、触发器等的情况下在 mysql 的单个查询中拥有所有这些吗?例如使用锁等。如果是这样,请给我一个小样本。
Jac*_*las 13
要做到这一点,而不阻塞另一个用户尝试更新在同一时间相同的配置文件的风险,你需要锁定该行的t1
第一,然后使用一个交易(如罗兰在评论你的问题指出):
start transaction;
select id from t1 where id=10 for update;
insert into t2 select * from t1 where id=10;
update t1 set id = 11 where id=10;
commit;
Run Code Online (Sandbox Code Playgroud)