mysql触发器需要一个参数_MYSQL:如何创建一个触发器,该触发器根据不同表中的值来计算字段值?...

bd96500e110b49cbb3cd949968f18be7.png

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

In table B I have field DPH(vat).

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.

Edit: 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;

and

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 ;

解决方案

Try this:

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

$$

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值