Доброго времени суток. Стоит задача для кеширования запросов в приложении. Для этого необходимо знать время обновления таблицы, которое MySQL не всегда выводит правильно. В целом я все сделал и все работает. Создал таблицу с полями table_name - имя таблицы, time_crud - время ее обновления:
CREATE TABLE IF NOT EXISTS `table_crud` (
`table_name` varchar(20) NOT NULL,
`time_crud` datetime NOT NULL,
UNIQUE KEY `table_name` (`table_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Написал хранимую процедуру:
DROP PROCEDURE IF EXISTS `tab_crud`;
DELIMITER //
CREATE PROCEDURE `tab_crud`(IN tab_name VARCHAR(20))
BEGIN
DECLARE tab_flag INT DEFAULT 0;
SELECT COUNT(*) INTO tab_flag FROM table_crud WHERE table_name = tab_name;
IF tab_flag = 0 THEN
INSERT INTO table_crud(table_name, time_crud) VALUES(tab_name, NOW());
ELSE
UPDATE table_crud SET time_crud = NOW() WHERE table_name = tab_name;
END IF;
END
DELIMITER ;
С помощью триггеров на INPUT, UPDATE и DELETE повесил ее на пару таблиц. Все отлично работает.
Загвоздка заключается в том, что для каждой таблицы нужно создавать свои триггеры и каждый из них должен иметь уникальное имя, да и к томуже в каждом триггере для каждой таблицы нужно передавать процедуре
tab_crud название самой таблицы. Это очень не удобно если постоянно нужно добалять новые таблицы или переименовать некоторые из них.
У меня возникло несколько вопросов:1. Есть ли какая-нибудь функция для вызова имени таблицы во время выполнения процедуры над ней?
2. Можно ли один триггер применить к нескольким таблицам? (по поводу этого сомневаюсь)