Maxim_ka
@Maxim_ka
Системный инженер

Простой вопрос по Mysql?

Добрый день, уважаемые,


Сильно прошу не минусовать, так как только пытаюсь ближе познакомиться с mysql. Возник вопрос с добавлением столбца в существующую таблицу.


Есть такая таблица:
mysql> describe 37A;
+-------------+---------------------+------+-----+---------+----------------+
| Field       | Type                | Null | Key | Default | Extra          |
+-------------+---------------------+------+-----+---------+----------------+
| id          | bigint(10) unsigned | NO   | PRI | NULL    | auto_increment |
| part        | varchar(20)         | NO   | PRI | NULL    |                |
| description | varchar(150)        | NO   |     | NULL    |                |
| unit        | varchar(5)          | NO   |     | NULL    |                |
| quantity    | decimal(3,0)        | NO   |     | NULL    |                |
| USD         | decimal(10,2)       | NO   |     | NULL    |                |
+-------------+---------------------+------+-----+---------+----------------+



Необходимо добавить еще один столбец в эту таблицу, столбец Total_in_USD должен быть произведением quantity на USD.


Знаю, что вопрос достаточно простой, почитал немного, к сожалению разобраться не получилось.

Заранее благодарю.
  • Вопрос задан
  • 3357 просмотров
Решения вопроса 1
FreeTibet
@FreeTibet
dharma supplier
По поводу SELECT и ALTER вам уже написали. А вот пример необходимых вам триггеров:

CREATE DEFINER = 'root'@'localhost' TRIGGER `tab_before_ins_tr` BEFORE INSERT ON `tab`  
FOR EACH ROW
BEGIN
  SET NEW.Total_in_USD = NEW.quantity * NEW.USD;
END;

CREATE DEFINER = 'root'@'localhost' TRIGGER `tab_before_upd_tr` BEFORE UPDATE ON `tab`
FOR EACH ROW
BEGIN
  SET NEW.Total_in_USD = NEW.quantity * NEW.USD;
END;
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 4
xel
@xel
front end developer
Так не делают, это избыточная информация, можно просто при запросе вытаскивать:

SELECT *, (quantity*USD as Total_in_USD) FROM 37A;

Но если очень уж хочется по извращаться — то копать в строну триггеров.

На события можно повесить обновление поля.
Ответ написан
LeoCcoder
@LeoCcoder
Как было сказано, столбец можно не добавлять, а вычислять его при выборе данных с помощью mysql или уже при получении данных с помощью видимо php (не знаю чем вы пользуетесь)

но если обязательно надо добавить, то:
ALTER TABLE `37A` ADD COLUMN Total_in_USD FLOAT(9,2); — создает столбец
потом надо задать ему значение
UPDATE `37A` SET Total_in_USD = quantity * USD; — установит требуемые значение столбцу

а вообще вопрос простой, в сети полно примеров, пользуйтесь гуглем/яндексом
Ответ написан
@edogs
Есть так же вариант с view
Нечто вроде
CREATE VIEW tablemultiple AS SELECT id, part, usd, quantity, quantity*usd as Total_in_USD from a37a
Ответ написан
Комментировать
ohifck
@ohifck
Возможно авто пришёл из друго БВ (например ORACLE или MsSQL) где есть вычисляемые поля. За счёт них экономия ресурсов при выборке, но более тяжёлая вставка(обновление). Это очень похоже на пример с триггерами — только там без триггеров делается. По сути приводит к денормализации за которой не надо следить.

Очень полезно если например выборка по результату выполнения сложной математической функции над несколькими полями.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы