powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Программы для сравнения изменений в таблицах
16 сообщений из 16, страница 1 из 1
Программы для сравнения изменений в таблицах
    #38767139
Serkotc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Приветствую, господа! Есть такая задача - смотреть, какие были сделаны изменения в таблице за сутки. Тоесть нужно сравнить mysqldump1 с mysqldump2, и вывести новые insert, или скажем, или delete. Вобщем, отчёт за сутки об изменениях в таблице. Подскажите, пожалуйста, наиболее подходящие средства для этого. Покачто кроме mysqldump - sort - diff ничего не придумывается, может есть что-либо штатное, типа mysqldiff, но в mysqldiff надо коннектиться к базе вроде как.
...
Рейтинг: 0 / 0
Программы для сравнения изменений в таблицах
    #38767140
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А логирующий триггер точно не подоходит?

Сравнением дампов вы пропустите те изменения, которые были перекрыты за этот же период другими изменениями.
...
Рейтинг: 0 / 0
Программы для сравнения изменений в таблицах
    #38767245
Serkotc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за вариант с логгирующим триггером - примерно так будет выглядеть?:
CREATE TRIGGER `Event` AFTER INSERT OR UPDATE OR DELETE ON `MyTable`
FOR EACH ROW BEGIN
INSERT INTO `TableForEvent` (create_date) VALUES (now());
END;
Подскажите, как добавить сюда пользователя, который делал изменения в таблицу и что имеено он делал - insert, update or delete?
...
Рейтинг: 0 / 0
Программы для сравнения изменений в таблицах
    #38767247
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Serkotcпользователя, который делал изменения CURRENT_USER()
Serkotcчто имеено он делал - insert, update or deleteТри отдельных триггера.
...
Рейтинг: 0 / 0
Программы для сравнения изменений в таблицах
    #38767596
Serkotc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, это именно то, что мне нужно, еще один вопрос - как добавить полностью команду, который были сделаны изменения? В отдельный столбец.
...
Рейтинг: 0 / 0
Программы для сравнения изменений в таблицах
    #38767608
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Serkotcкак добавить полностью команду, который были сделаны изменения? В отдельный столбец.Расшифруйте, я не понял эту фразу.
...
Рейтинг: 0 / 0
Программы для сравнения изменений в таблицах
    #38767683
Serkotc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В таблицу, где будет вестись учет изменений будут столбцы - дата изменения (create_date), пользователь, который сделал изменения (user), и комманда, которой делались изменения (command). Например, создалась новая запись - Insert into Table (id, car, colour) values (35, moskvich, green). Как сделать так, чтобы триггер эту комманду заносил в столбец command? Есть такая функция ?
CREATE TRIGGER `Event` AFTER INSERT OR UPDATE OR DELETE ON `MyTable`
FOR EACH ROW BEGIN
INSERT INTO `TableForEvent` (create_date, user, command) VALUES (now(), current_user(), ???);
END;
...
Рейтинг: 0 / 0
Программы для сравнения изменений в таблицах
    #38767690
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Serkotc,

Нет, такой возможности нет, насколько я в курсе. Можно только получить конкретные значения всех столбцов.
Да и толку от такой команды мало. Та же now() в другое время даст другой результат.
...
Рейтинг: 0 / 0
Программы для сравнения изменений в таблицах
    #38767751
Serkotc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Окей, значит если у меня есть таблица MyTable (id, car, colour), мне надо логгировать изменения в ней, значит я создаю таблицу TableforEvent (id_changes, car_changes, colour_changes, create_date, user). Затем триггер:
CREATE TRIGGER `Event` BEFORE UPDATE `MyTable`
FOR EACH ROW BEGIN
INSERT INTO `TableForEvent` (id_changes, car_changes, colour_changes, create_date, user) VALUES ((CONCAT(NEW.`id`,'-', OLD.`id`), (CONCAT(NEW.`car`,'-', OLD.`car`), (CONCAT(NEW.`colour`,'-', OLD.`colour`), NOW(), CURRENT_USER());
END;
С апдейтом я правильно написал? А как быть с Delete или Insert - как узнать, что удалили или добавили в базу?
...
Рейтинг: 0 / 0
Программы для сравнения изменений в таблицах
    #38767765
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Serkotcкак узнать, что удалили или добавили в базу?добавить колонку changetype и писать туда код операции
...
Рейтинг: 0 / 0
Программы для сравнения изменений в таблицах
    #38767767
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Serkotc,

А зачем в апдейте старое значение писать? Оно же известно из предыдущей записи для этого первичного ключа. Если, конечно, у вас не практикуется изменение первичных ключей.


SerkotcА как быть с Delete или Insert - как узнать, что удалили или добавили в базу?Точно так же. http://dev.mysql.com/doc/refman/5.5/en/trigger-syntax.html In an INSERT trigger, only NEW.col_name can be used; there is no old row. In a DELETE trigger, only OLD.col_name can be used; there is no new row. In an UPDATE trigger, you can use OLD.col_name to refer to the columns of a row before it is updated and NEW.col_name to refer to the columns of the row after it is updated.
...
Рейтинг: 0 / 0
Программы для сравнения изменений в таблицах
    #38767959
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SerkotcПриветствую, господа! Есть такая задача - смотреть, какие были сделаны изменения в таблице за сутки. Тоесть нужно сравнить mysqldump1 с mysqldump2, и вывести новые insert, или скажем, или delete. Вобщем, отчёт за сутки об изменениях в таблице. Подскажите, пожалуйста, наиболее подходящие средства для этого. Покачто кроме mysqldump - sort - diff ничего не придумывается, может есть что-либо штатное, типа mysqldiff, но в mysqldiff надо коннектиться к базе вроде как.

diff ...
...
Рейтинг: 0 / 0
Программы для сравнения изменений в таблицах
    #38768887
Serkotc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Немного непонятно с update все-таки. Решил делать так: Есть таблица MyTable (id, car, colour), мне надо логгировать изменения в ней, значит я создаю таблицу TableforEvent (id, id_n, car, car_n, colour, colour_n, create_date, user). А потом буду делать просто выборку так: Select * from TableforEvent и буду видеть и старые значения полей и сразу новые. С триггером помогите, плиз:
CREATE TRIGGER `Event` BEFORE UPDATE `MyTable`
FOR EACH ROW BEGIN
INSERT INTO `TableForEvent` (id, id_n, car, car_n, colour, colour_n, create_date, user) VALUES (old.id, new.id, old.car, new.car, old.colour, new.colour, NOW(), CURRENT_USER());
END; - Так будет неправильно?
(In an UPDATE trigger, you can use OLD.col_name to refer to the columns of a row before it is updated and NEW.col_name to refer to the columns of the row after it is updated.)
INSERT INTO `TableForEvent` (id, id_n, car, car_n, colour, colour_n, create_date, user) VALUES (old.id, id, old.car, car, old.colour, colour, NOW(), CURRENT_USER()); - Так будет правильно?
...
Рейтинг: 0 / 0
Программы для сравнения изменений в таблицах
    #38768903
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SerkotcА потом буду делать просто выборку так: Select * from TableforEvent и буду видеть и старые значения полей и сразу новыеА нафига? Сделайте {id, car, colour, eventtype, eventtime, username} и пишите туда свои 3 поля, (ins/upd/del) и дату изменения. Заодно и места меньше занимать будет.
Код: sql
1.
2.
3.
4.
CREATE TRIGGER `Event` BEFORE UPDATE `MyTable`
FOR EACH ROW BEGIN
INSERT INTO `TableForEvent` (id, car, colour, eventtype, eventtime, username)
 VALUES (new.id, new.car, new.colour, 'upd', NOW(), CURRENT_USER());
...
Рейтинг: 0 / 0
Программы для сравнения изменений в таблицах
    #38768918
Serkotc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хорошо, если у меня произошел update по colour, как мне быстро увидеть старое значение colour? И какие значения будут в полях id, car в таблице TableForEvent в таком случае?
...
Рейтинг: 0 / 0
Программы для сравнения изменений в таблицах
    #38768937
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Serkotcкак мне быстро увидеть старое значение colour?Посмотреть на предыдущую строку. //К.О.
SerkotcИ какие значения будут в полях id, car в таблице TableForEvent в таком случае?В предыдущей строке - старые, в текущей - новые.
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Программы для сравнения изменений в таблицах
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]