我有一个 varchar(255) 的记录,它用作我的表的主键。我需要能够将记录的主键更新为新值,但是如果表中已经存在新的主键,那么这实际上是一条重复的记录,然后我想删除它。
我对如何实际执行此操作完全感到困惑,任何有关示例的帮助将不胜感激。
作为最理想的解决方案,是否可以在单个查询中执行此操作?
好的,所以在不使用任何键且不更改数据库结构的情况下以原子方式执行此操作将必须如下所示:
begin;
delete from t where keycol = $keycol;
update t set keycol = $keycol where keycol = $oldkeycol;
commit;
如果没有交易,您将无法保证不会丢失数据。但是只有先删除原始数据才能更新成功。
你可能想要这个replace
声明。如果新键存在于表中,您可以替换键中的值。
就像是:
replace t(keycol, col1, col2, col3)
values ($keycol, $col1, $col2, $col3);
如果$keycol
表中已经存在,则删除现有记录并插入新值。如果它不存在,则插入新值。
如果你特别想做你所说的,那么就像:
delete from t where keycol = $keycol;
if mysql_affected_rows() = 0
update t
set keycol = $keycol where keycol = $oldkeycol;