sql >> Databáze >  >> RDS >> Mysql

Aktualizace SQL při aktualizaci duplicitního klíče

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.



  1. jaký je dobrý způsob horizontálního úlomku v postgresql

  2. java.sql.SQLException:Nebyl nalezen žádný vhodný ovladač pro test localhost

  3. Automatické připojení k PDO pouze v případě potřeby

  4. SQL Injection DROP TABLE nefunguje