Это моя первая попытка опубликовать ответ в StackOverflow. Надеюсь, что это полезно ..
Я написал тестовую процедуру ниже, используя мою локальную базу данных MySQL. Он настроен на 10 полных секунд и возвращает пустой набор результатов, если нет записей. Если строка вставляется в течение десяти секунд работы, она выйдет из цикла и вернет новые результаты.
Функция Sleep предназначена для того, чтобы не дать процедуре съесть слишком много ЦП, пока она работает, запуская Select Count (*) только один раз в секунду. Вы можете установить это на любой интервал, который вы хотите.
Хотя эта процедура работает хорошо, я должен согласиться с natevw об использовании Триггеров .
DELIMITER $$
CREATE PROCEDURE sp_TestQueryResultsTimeout()
BEGIN
DECLARE v_interval, ct, v_time INT;
/* This will keep track of how much time has passed*/
SET v_interval = 0;
/* This is used for comparing the rowcount*/
SET ct = 0;
/* This is used to keep the procedure from returning the Sleep functions results'
This could also be used to keep a more accurate count of the amount of Sleep time has passed by adding the results of the sleep function to it on every iteration*/
SET v_time = 0;
/* This while statement should run for slightly longer than ten seconds
The amount of extra time will begin to add up depending on how long the select count (*) takes
and how many iterations you want to make'*/
WHILE v_interval < 10 DO
/*Get the count from your table*/
SET ct = (SELECT count(*) FROM tbUsers);
/*If the count is greater than 0, exit the while by satisfying the condition*/
if (ct > 0) then
SET v_interval = 10;
else
/*If the count is less than 0, sleep for 1 second*/
SET v_time = (SELECT SLEEP(1));
end if;
/*Increment*/
SET v_interval = v_interval + 1;
END WHILE;
SELECT * FROM tbUsers;
END$$
DELIMITER ;