#mysql
Есть ли в MySQL такая функция, как например в excel: задать одному столбцу какую-нибудь формулу, чтобы каждая ячейка в этом столбце = сумме других ячеек в строке? Причем, чтобы при изменении значений в строке сумма менялась автоматически. Или нужно все это делать вручную?
Ответы
Ответ 1
Хранить в базе данных избыточные данные не принято. А колонка, всегда имеющая некое значение, зависящее от других колонок той же таблицы - явная избыточность. Для того, что бы можно было не писать каждый раз требуемые вычисления и при этом не хранить в базе избыточные данные придуманы VIEW. Например, создадим view "добавляющее" колонку с суммой колонок A и B: create or replace view MyView as select T.*, A + B as AB from TableX T ; После этого мы можем при выборке данных использовать эту view вместо таблицы для получения данных: select * from MyView where AB > 10; В результате запроса мы получим данные из таблицы TableX в которых сумма колонок A и B больше 10. В выводе будет и сама колонка 'AB' содержащая сумму.Ответ 2
Да, можно решить эту задачу через триггер. Например, путь имеется таблица tbl с тремя столбцами one, two, other. Можно создать два триггера на вставку и обновление данных, например, помещая в столбец other сумму двух других столбцов (столбцу other при этом можно не назначать значение) DELIMITER // CREATE TRIGGER addTbl BEFORE INSERT ON tbl FOR EACH ROW BEGIN SET NEW.other = NEW.one + NEW.two; END// CREATE TRIGGER updateTbl BEFORE UPDATE ON tbl FOR EACH ROW BEGIN SET NEW.other = NEW.one + NEW.two; END// Так как в составе триггера мы используем разделитель точка с запятой, то в примере выше при помощи команды DELIMITER меняется признак окончания запроса на // (в GUI-средах это либо не требуется, либо для разделителя предназначено отдельно поле).
Комментариев нет:
Отправить комментарий