SQL 在插入期间使用触发器计算一个值 table

SQL use trigger during insert for calculating value in one table

我有两个表,第一个是零件,第二个是订单。在订单中,我存储 IDPart 和这部分的数量。 我想实现在将 IDPart 和 Quantity 值插入订单时,触发器会自动触发以计算价格。 有人可以帮忙解决吗?

样本:

CREATE TABLE Parts
(
    ID INT IDENTITY(1,1) PRIMARY KEY,               
    PartName NVARCHAR(70),
    Price DECIMAL(6,2)
)

CREATE TABLE Orders
(
    ID INT IDENTITY(1,1) PRIMARY KEY,   
    IDPart INT REFERENCES Parts(ID),
    Quantity INT,
    Price DECIMAL(6,2)
)

正如您所说,您想要做的是:

  • 创建触发器
  • 确定何时应该触发 - 插入和更新
  • 创建一个在每次更新或插入时运行的函数

请注意,我只对 PL/pgSQL (PostgresSQL) 有经验,所以这就是函数的语言。

创建触发器

CREATE TRIGGER insertOrder    
AFTER INSERT OR UPDATE ON Orders
FOR EACH ROW
EXECUTE PROCEDURE functionSetOrderPrice();

此触发器称为 insertOrder,每当我们在 Orders-table.

中插入或更新一行时,都会触发函数“functionSetOrderPrice()”

正在创建函数

CREATE FUNCTION functionSetOrderPrice()
RETURNS trigger AS 
$$
BEGIN
  -- Getting the particular part's price
  part_price := (SELECT price FROM Parts WHERE Parts.ID=NEW.IDPart);

  -- Multiplying the price with the quantity to get order total price
  order_price := part_price * NEW.quantity;

  -- Let's set the Orders.price to the correct value!
  NEW.price = order_price;
  return NEW;
END;
$$ LANGUAGE plpgsql;

一些需要注意的事情,可以帮助您和其他人了解您的数据库是要坚持这些原则:

  • Table-名称应始终为复数且大写:部件、订单、用户
  • 属性名称应始终为小写和单数:数量、名称、id

此外,如果您正在寻找 MySQL 的触发器,语法略有不同,但思考过程是相同的。 Here's a good example.