Row Level Trigger for insert/update to a table

All we need is an easy explanation of the problem, so here it is.

Given a table ITEM as below :

CREATE TABLE ITEM (
ItemNo        int not null,
category      varchar(20) not null,
Quantity      int not null,
Price       decimal(10,2) not null,
Total       decimal(10,2) not null,
CONSTRAINT pk_item primary key (ItemNo)
);

I need to write a row-level trigger called update_item that will fire whenever Quantity and/or Price is inserted/updated. When this happens, the Total column will be set by the trigger as the product of Quantity and Price.

Any help will be appreciated.

How to solve :

I know you bored from this bug, So we are here to help you! Take a deep breath and look at the explanation of your problem. We have many solutions to this problem, But we recommend you to use the first method because it is tested & true method that will 100% work for you.

Method 1

In MySQL you need to make deferent trigger for updating and Inserting;

DELIMITER $$

CREATE TRIGGER before_ITEM _insert
BEFORE INSERT
ON ITEM FOR EACH ROW
BEGIN
   SET NEW.Total = NEW.Quantity * NEW.Price;   
END $$

DELIMITER ;

CREATE TRIGGER before_ITEM _UPDATE
BEFORE UPDATE
ON ITEM FOR EACH ROW
BEGIN
   SET NEW.Total = NEW.Quantity * NEW.Price;   
END $$

DELIMITER ;

But for that purpose you can use generated Columns like

CREATE TABLE ITEM (
ItemNo        int not null,
category      varchar(20) not null,
Quantity      int not null,
Price       decimal(10,2) not null,
Total       decimal(10,2) GENERATED ALWAYS AS (Quantity * Price),
CONSTRAINT pk_item primary key (ItemNo)
);

Note: Use and implement method 1 because this method fully tested our system.
Thank you 🙂

All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

Leave a Reply