Za prvé, ten primární klíč s více sloupci je pravděpodobně špatný nápad; jak jste zjistili, je obtížné manipulovat s jednotlivými poli. Co byste měli udělat, je přidat do této tabulky automatický přírůstkový bigintový sloupec, který se stane vaším novým primárním klíčem, a vaše třísloupcové omezení jedinečnosti může být místo toho jedinečný index. Mělo by to fungovat lépe... ale také vám umožní provádět takovou manipulaci, kterou potřebujete. Umožní vám provádět úpravy, ale stále vám umožní identifikovat původní řádky podle jejich celočíselného indexu.
Pokud to uděláte, vaši „jednorázovou aktualizaci“ lze nyní bezpečně provést, pokud vám nebude vadit vytvořit si nějaké dočasné tabulky, se kterými budete pracovat. Něco jako toto:
Vytvořte několik dočasných tabulek se stejným schématem, ale bez jedinečného index se třemi sloupci – můžete mít index, který není jedinečný, protože to pomůže dotazům, které se chystáte provést;
Zkopírujte záznamy, které potřebujete zpracovat, do první tabulky (včetně jedinečného celočíselného primárního klíče);
Aktualizujte všechny detail
sloupce, které musíte aktualizovat v dočasné tabulce;
Použijte INSERT ... SELECT
s SUM
a GROUP BY
sloučit tyto záznamy do druhé tabulky;
INSERT INTO temp2 (...whatever...) SELECT ...whatever..., SUM(no) FROM temp1 GROUP BY ...whatever...
Nakonec odstraňte všechny záznamy v tabulce temp1 z původní tabulky (pomocí celočíselného primárního klíče) a vložte záznamy v tabulce temp2 do původní tabulky.