MYSQL:如何创建一个触发器,该触发器根据不同表中的值来计算字段值? [英] MYSQL: How do I create a trigger that calculates a field value based on value from different table?

查看:344
本文介绍了MYSQL:如何创建一个触发器,该触发器根据不同表中的值来计算字段值?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

表A 中,我有字段 CENA (价格), cena_za_kus (price_per_piece ), mnozstvi (数量)。

表B 中,我有字段 DPH (vat)。

In table A I have fields CENA(price), cena_za_kus(price_per_piece), mnozstvi(quantity).
In table B I have field DPH(vat).

我想添加一个更新/插入之前触发器,该触发器将计算 PRICE 字段,如下所示:

I'd like to add a before update/insert trigger, which would calculate the value of PRICE field, something like this:

price = (price_per_piece * count) + (price_per_piece * count * tableB.vat)

这可能吗?
谢谢。

Is this possible? Thank you.

编辑: A中的行具有一个外键 dph_id 指向表B 中的相应行。

And the row in table A has a foreign_key dph_id pointing to the corresponding row in table B.

   CREATE TABLE `polozky` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `objednavka_id` int(11) NOT NULL,
  `dph_id` int(11) NOT NULL,
  `polozka` varchar(64) COLLATE utf8_unicode_ci NOT NULL,
  `cena` float NOT NULL,
  `mnozstvi` int(11) NOT NULL,
  `cena_za_kus` float NOT NULL,
  PRIMARY KEY (`id`),
  KEY `IdObjednavka` (`objednavka_id`,`dph_id`),
  KEY `objednavka_id` (`objednavka_id`),
  KEY `dph_id` (`dph_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=63663 ;


ALTER TABLE `polozky`
  ADD CONSTRAINT `polozky_ibfk_7` FOREIGN KEY (`objednavka_id`) REFERENCES `objednavky` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  ADD CONSTRAINT `polozky_ibfk_8` FOREIGN KEY (`dph_id`) REFERENCES `dph` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;

CREATE TABLE `dph` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `sekce` varchar(64) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'nastaveni',
  `popis` varchar(8) COLLATE utf8_unicode_ci NOT NULL,
  `DPH` int(11) unsigned NOT NULL,
  `poradi` int(11) unsigned NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `DPH_2` (`DPH`),
  UNIQUE KEY `popis` (`popis`),
  KEY `DPH` (`DPH`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=9 ;


推荐答案

尝试一下:

DELIMITER $$

CREATE TRIGGER `yourDB_polozky`
   BEFORE INSERT
   ON `yourDB`.`polozky`
   FOR EACH ROW
BEGIN
   DECLARE vat_rate   float;

   SELECT DPH
     INTO dph_rate
     FROM `yourDB`.`dph`
    WHERE id = new.dph_id;

   SET new.cena = (1 + dph_rate) * (new.cena_za_kus * new.mnozstvi);
END
$$

这篇关于MYSQL:如何创建一个触发器,该触发器根据不同表中的值来计算字段值?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆