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

Úprava databáze se schválením - mysql

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.



  1. Proč PL/SQL nerespektuje oprávnění udělená rolemi?

  2. Rails aktivní záznam dotaz získává většinu běžných objektů

  3. Jak mohu aktualizovat dvě tabulky v jednom dotazu?

  4. PL/SQL:existuje instrukce pro úplné zastavení provádění skriptu?