Имаме нещо подобно на един от нашите сайтове, добавихме куп таблици:
users sites ... и т.н.
След това имаме куп таблици в сянка:
users-shadow sites-shadow ... и т.н.
Сенчестите таблици имат идентични структури с реалните таблици, с изключение на добавен ред за потребителя, който е направил промяната. Така че първо използваме тази заявка, когато е подадена промяна от потребител, който трябва да получи одобрение на своите действия в базата данни:
REPLACE INTO users-shadow (user_mod,id,username,password,salt...) VALUES (16,50,'bob','stuff','salt'...);
Очевидно се уверете, че това не е отворено за инжектиране, използвайте подготвени отчети и т.н.
При одобрение, ред в shadow таблицата просто се премахва от shadow таблицата, user_mod стойността е отпаднала и промените (ненулеви стойности) са вмъкнати в реалната таблица (или актуализирани, ако id е посочен, като се използва ЗАМЕНЯНЕ
синтаксис). Ние правим тази логика в perl, така че за съжаление нямаме под ръка SQL за нея.
Запомнете този SQL REPLACE прави DELETE и INSERT вместо UPDATE . Ще трябва да промените всички тригери, за да позволите това поведение.
Забележка:Причината, поради която не използвахме флаг за „одобрение“, беше, че се нуждаехме от възможността да променяме съществуващи записи, разбира се, не можехме да имаме множество записи с един и същи първичен ключ.