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.
我有两个表,第一个是零件,第二个是订单。在订单中,我存储 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.