.MySQL的触发器(Trigger)是在数据库中定义的一种特殊类型的存储过程,它会在指定的数据库事件发生时自动执行。触发器可以用于实现数据的自动更新、完整性约束、日志记录等功能。
CREATE TRIGGER trigger_name
{BEFORE | AFTER} {INSERT | UPDATE | DELETE} ON table_name
FOR EACH ROW
trigger_body
其中,trigger_name
是触发器的名称,table_name
是触发器所关联的表名,{BEFORE | AFTER}
表示触发器执行的时机,可以是在数据库事件之前或之后执行,{INSERT | UPDATE | DELETE}
表示触发器响应的数据库事件类型,可以是插入、更新或删除操作,FOR EACH ROW
表示对每一行记录都要执行触发器,trigger_body
是触发器的执行体,可以包括SQL语句和存储过程等。
在一个在线商城的数据库中使用触发器来实现库存管理和销售统计。
假设有一个名为`products`的表,其中包含了产品的信息,包括产品ID、名称、价格和库存数量等字段。还有一个名为`sales`的表,记录了每次销售的信息,包括销售ID、销售日期、产品ID和销售数量等字段。
CREATE TABLE products ( product_id INT PRIMARY KEY, name VARCHAR(50) NOT NULL, price DECIMAL(10,2) NOT NULL, stock_quantity INT NOT NULL ); CREATE TABLE sales ( sale_id INT PRIMARY KEY, sale_date DATE NOT NULL, product_id INT NOT NULL, quantity INT NOT NULL, FOREIGN KEY (product_id) REFERENCES products (product_id) );
我们可以创建两个触发器来管理库存和更新销售统计:
1. 触发器一:在`sales`表插入记录时,减少对应产品的库存数量。
CREATE TRIGGER update_inventory AFTER INSERT ON sales FOR EACH ROW BEGIN UPDATE products SET stock = stock - NEW.quantity WHERE product_id = NEW.product_id; END;
以上触发器会在每次向`sales`表插入记录后自动执行,在`products`表中减少对应产品的库存数量。
2. 触发器二:在`sales`表插入记录时,更新产品的销售数量统计。
CREATE TRIGGER update_sales_statistics AFTER INSERT ON sales FOR EACH ROW BEGIN UPDATE products SET sales_count = sales_count + NEW.quantity WHERE product_id = NEW.product_id; END;
以上触发器会在每次向`sales`表插入记录后自动执行,在`products`表中更新对应产品的销售数量统计。
通过上述触发器,当有新的销售记录插入到`sales`表时,库存数量会自动减少,并且对应产品的销售数量统计会自动更新。这样可以确保库存和销售统计的一致性。
SHOW TRIGGERS;
SHOW TRIGGERS LIKE 'table_name';
DROP TRIGGER update_stock_quantity;