Něco podobného máme na jednom z našich stránek, přidali jsme hromadu tabulek:
users sites ... atd
Pak tu máme spoustu tabulek stínů:
users-shadow sites-shadow ... atd
Stínové tabulky mají identickou strukturu jako skutečné tabulky s výjimkou přidaného řádku pro uživatele, který provedl změnu. Nejprve tedy použijeme tento dotaz, když změnu odešle uživatel, který potřebuje schválit své akce v databázi:
REPLACE INTO users-shadow (user_mod,id,username,password,salt...) VALUES (16,50,'bob','stuff','salt'...);
Samozřejmě se ujistěte, že to není otevřené pro injekci, použijte připravená prohlášení atd.
Po schválení řádek ve shadow tabulka je jednoduše odstraněna ze shadow tabulka user_mod hodnota zrušena a změny (hodnoty jiné než null) vloženy do skutečné tabulky (nebo aktualizovány, pokud id je zadáno pomocí REPLACE
syntax). Tuto logiku děláme v perlu, takže pro ni bohužel nemáme po ruce žádné SQL.
Pamatujte, že SQL REPLACE provede DELETE a INSERT spíše než UPDATE . Budete muset upravit všechny spouštěče, abyste toto chování umožnili.
Poznámka:Důvod, proč jsme nepoužili příznak 'schválit', byl ten, že jsme potřebovali možnost upravit existující záznamy, samozřejmě jsme nemohli mít více záznamů se stejným primárním klíčem.