
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
05.10.2014, 10:32:03
|
|||
|---|---|---|---|
|
|||
Программы для сравнения изменений в таблицах |
|||
|
#18+
Приветствую, господа! Есть такая задача - смотреть, какие были сделаны изменения в таблице за сутки. Тоесть нужно сравнить mysqldump1 с mysqldump2, и вывести новые insert, или скажем, или delete. Вобщем, отчёт за сутки об изменениях в таблице. Подскажите, пожалуйста, наиболее подходящие средства для этого. Покачто кроме mysqldump - sort - diff ничего не придумывается, может есть что-либо штатное, типа mysqldiff, но в mysqldiff надо коннектиться к базе вроде как. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
05.10.2014, 10:43:09
|
|||
|---|---|---|---|
Программы для сравнения изменений в таблицах |
|||
|
#18+
А логирующий триггер точно не подоходит? Сравнением дампов вы пропустите те изменения, которые были перекрыты за этот же период другими изменениями. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
05.10.2014, 16:49:41
|
|||
|---|---|---|---|
|
|||
Программы для сравнения изменений в таблицах |
|||
|
#18+
Спасибо за вариант с логгирующим триггером - примерно так будет выглядеть?: 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? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
05.10.2014, 17:06:52
|
|||
|---|---|---|---|
Программы для сравнения изменений в таблицах |
|||
|
#18+
Serkotcпользователя, который делал изменения CURRENT_USER() Serkotcчто имеено он делал - insert, update or deleteТри отдельных триггера. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
06.10.2014, 11:10:44
|
|||
|---|---|---|---|
|
|||
Программы для сравнения изменений в таблицах |
|||
|
#18+
Спасибо, это именно то, что мне нужно, еще один вопрос - как добавить полностью команду, который были сделаны изменения? В отдельный столбец. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
06.10.2014, 11:23:52
|
|||
|---|---|---|---|
Программы для сравнения изменений в таблицах |
|||
|
#18+
Serkotcкак добавить полностью команду, который были сделаны изменения? В отдельный столбец.Расшифруйте, я не понял эту фразу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
06.10.2014, 12:12:57
|
|||
|---|---|---|---|
|
|||
Программы для сравнения изменений в таблицах |
|||
|
#18+
В таблицу, где будет вестись учет изменений будут столбцы - дата изменения (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; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
06.10.2014, 12:15:52
|
|||
|---|---|---|---|
Программы для сравнения изменений в таблицах |
|||
|
#18+
Serkotc, Нет, такой возможности нет, насколько я в курсе. Можно только получить конкретные значения всех столбцов. Да и толку от такой команды мало. Та же now() в другое время даст другой результат. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
06.10.2014, 12:53:53
|
|||
|---|---|---|---|
|
|||
Программы для сравнения изменений в таблицах |
|||
|
#18+
Окей, значит если у меня есть таблица 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 - как узнать, что удалили или добавили в базу? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
06.10.2014, 12:58:42
|
|||
|---|---|---|---|
Программы для сравнения изменений в таблицах |
|||
|
#18+
Serkotcкак узнать, что удалили или добавили в базу?добавить колонку changetype и писать туда код операции ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
06.10.2014, 12:59:24
|
|||
|---|---|---|---|
Программы для сравнения изменений в таблицах |
|||
|
#18+
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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
06.10.2014, 15:07:07
|
|||
|---|---|---|---|
Программы для сравнения изменений в таблицах |
|||
|
#18+
SerkotcПриветствую, господа! Есть такая задача - смотреть, какие были сделаны изменения в таблице за сутки. Тоесть нужно сравнить mysqldump1 с mysqldump2, и вывести новые insert, или скажем, или delete. Вобщем, отчёт за сутки об изменениях в таблице. Подскажите, пожалуйста, наиболее подходящие средства для этого. Покачто кроме mysqldump - sort - diff ничего не придумывается, может есть что-либо штатное, типа mysqldiff, но в mysqldiff надо коннектиться к базе вроде как. diff ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
07.10.2014, 12:08:49
|
|||
|---|---|---|---|
|
|||
Программы для сравнения изменений в таблицах |
|||
|
#18+
Немного непонятно с 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()); - Так будет правильно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
07.10.2014, 12:16:37
|
|||
|---|---|---|---|
Программы для сравнения изменений в таблицах |
|||
|
#18+
SerkotcА потом буду делать просто выборку так: Select * from TableforEvent и буду видеть и старые значения полей и сразу новыеА нафига? Сделайте {id, car, colour, eventtype, eventtime, username} и пишите туда свои 3 поля, (ins/upd/del) и дату изменения. Заодно и места меньше занимать будет. Код: sql 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
07.10.2014, 12:26:02
|
|||
|---|---|---|---|
|
|||
Программы для сравнения изменений в таблицах |
|||
|
#18+
Хорошо, если у меня произошел update по colour, как мне быстро увидеть старое значение colour? И какие значения будут в полях id, car в таблице TableForEvent в таком случае? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
07.10.2014, 12:36:30
|
|||
|---|---|---|---|
Программы для сравнения изменений в таблицах |
|||
|
#18+
Serkotcкак мне быстро увидеть старое значение colour?Посмотреть на предыдущую строку. //К.О. SerkotcИ какие значения будут в полях id, car в таблице TableForEvent в таком случае?В предыдущей строке - старые, в текущей - новые. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=47&mobile=1&tid=1834123]: |
0ms |
get settings: |
8ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
68ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
65ms |
get tp. blocked users: |
2ms |
| others: | 208ms |
| total: | 394ms |

| 0 / 0 |
