SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 08.08.2012 09:45:46

elslepas
Участник
Зарегистрирован: 31.10.2010
Сообщений: 16

Получение имени таблицы

Доброго времени суток. Стоит задача для кеширования запросов в приложении. Для этого необходимо знать время обновления таблицы, которое 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. Можно ли один триггер применить к нескольким таблицам? (по поводу этого сомневаюсь)

Неактивен

 

#2 08.08.2012 10:37:44

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3878

Re: Получение имени таблицы

2. такое не предусмотрено
1. это, к сожалению, тоже, при переименовании придется менять и триггер

Неактивен

 

#3 08.08.2012 11:18:53

elslepas
Участник
Зарегистрирован: 31.10.2010
Сообщений: 16

Re: Получение имени таблицы

спасибо

Неактивен

 

#4 08.08.2012 13:59:28

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5833

Re: Получение имени таблицы

elslepas написал:

необходимо знать время обновления таблицы, которое MySQL не всегда выводит правильно.

Что вы имеете в виду?

Разве
`time_crud` timestamp default current_timestamp on update current_timestamp
не решит проблему?

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson