#mysql #schedule #mysql-event
#mysql #Расписание #mysql-событие
Вопрос:
я создаю свою первую базу данных на MySQL и хочу создать систему, подобную underground. Чтобы запустить систему, я хочу, чтобы они переходили с одной станции на другую с фиксированным временем в 2 секунды, поэтому я использую следующий код
delimiter |
CREATE EVENT runBlue
ON SCHEDULE EVERY 2 SECOND
DO
BEGIN
WHILE (SELECT Actual_Station FROM route WHERE Actual_Station) < 311 DO
UPDATE mydb.route SET Actual_Station = (Actual_Station 1);
END WHILE;
WHILE (SELECT Actual_Station FROM route WHERE Actual_Station) >= 300 DO
UPDATE mydb.route SET Actual_Station = (Actual_Station-1);
END WHILE;
END |
delimiter ;
Что меня беспокоит, так это то, что нет приращения к Actual_Station, которое представлено INT , причина, по которой я это делаю, заключается в том, что метро разделено на 3 маршрута, это пример первого, который проходит от станции 300 до станции 311.
Комментарии:
1. Тогда намного проще и быстрее идентифицировать группы, если в маршрутах был столбец group_id вместо магических чисел. Однако я не уверен, чего вы пытаетесь достичь. Похоже, что вы увеличиваете и уменьшаете все станции. Разве
route
иmydb.route
отличаются? Не могли бы вы показать свою схему и объяснить, что вы пытаетесь сделать более подробно?2. СУБД предназначена для хранения и извлечения реляционных данных. Я не понимаю, какое это имеет отношение к этому.
3. Я хочу перейти от станции 300 к станции 311 и обратно, это объясняет приращение и уменьшение, эти магические числа являются идентификатором станции. Здесь не происходит ни увеличения, ни уменьшения, я думаю, что есть проблема в условии while
4. Сначала вы увеличиваете станцию до тех пор, пока она не примет значение 311, затем первый цикл while останавливается, а второй цикл while уменьшает значение до 299… Похоже, что в состоянии while нет ошибки, но ошибка в понимании того, как
WHILE.. DO ...END WHILE
это работает. (может быть, еще раз почитать документы ?)5. Я тестирую это, нет ни увеличения, ни уменьшения