我有varchar(255)的记录,该记录用作表的主键。我需要能够将记录的主键更新为新值,但是,如果表上已经存在新的主键,那么实际上这是一条重复记录,然后我想将其删除。
我对如何实际执行此操作完全感到困惑,对任何示例的帮助将不胜感激。
是否可以在单个查询中将其作为最理想的解决方案?
最佳答案
好的,因此原子地执行此操作而无需使用任何键(而不使用键)并且不更改数据库结构将必须如下所示:
begin;
delete from t where keycol = $keycol;
update t set keycol = $keycol where keycol = $oldkeycol;
commit;
没有交易,您将无法保证不会丢失数据。但是,只有先删除原始数据,更新才能成功。