我想跟踪用户的更改历史记录,以便每当他更改个人资料时,我都需要获取旧数据并存储在历史记录中,并使用新数据进行更新。
我可以使用select
获取旧数据,使用insert
历史记录,最后使用update
更改数据。
我可以在不使用存储过程,触发器等的情况下,在mysql的单个查询中拥有所有这些功能吗?例如使用锁等。
1
@savaranan:这个问题值得+1,因为它确实向DBA和开发人员强烈提示使用事务并充分利用数据库的ACID属性。
—
RolandoMySQLDBA 2011年
@savaranan:出于所有意图和目的,Jack提供了唯一可行的答案。实际上,杰克·道格拉斯采取了另一步骤,并通过执行SELECT ... FOR UPDATE强制对id = 10的每一行进行间歇锁定,以增加MVCC保护。他的回答进一步强调了Jack和我一直在说的重点:UPDATE和INSERT不可能,也永远不会是单个查询,对于您提出的SQL行为,它们只能是单个事务。
—
RolandoMySQLDBA 2011年