я хочу отслеживать историю изменений для пользователя, поэтому, когда бы он ни изменял свой профиль, мне нужно было брать старые данные, сохранять их в истории и обновлять новыми данными.
Я могу использовать select
для получения старых данных, insert
для истории и, наконец, update
для изменения данных.
Могу ли я иметь все это в одном запросе в MySQL без использования хранимых процедур, триггеров и т. д., как с помощью блокировок и т. д., если да, дайте мне небольшой пример.
Ответы:
Для того, чтобы сделать это без риска блокировки другого пользователя пытается обновить тот же профиль , в то же время, необходимо зафиксировать строку в
t1
первом, а затем использовать транзакцию (как Роландо указывает в комментариях к вашему вопросу):источник
Я не верю, что есть способ объединить все три утверждения. Самая близкая вещь к этому не очень вам помогает, и это SET SELECT. Ваша лучшая ставка - это триггер. Ниже приведен пример триггера, который я часто использую для поддержки именно такого контрольного журнала (созданного с помощью PHP):
источник
Я обнаружил, что этот запрос работает на серверах SQL и MySQL
INSERT INTO t2 SELECT * FROM t1 WHERE id=10; UPDATE t1 SET id=11 WHERE id=10;
Надеюсь, что это будет полезно для некоторых еще и в будущем.
источник