本文已参与「新人创作礼」活动,一起开启掘金创作之路。
【MySQL】触发器
一、目的与要求:
掌握触发器的工作原理、定义及操作方法
二、内容:
1.自动保存对所有表(至少fruits表和customers表)的插入、更新、删除操作到opertaion表中。
①增加opertaion表
源码:
create table opertaion(
id int(11) primary key auto_increment not null,
tablename varchar(50) not null,
opname varchar(50) not null,
optime datetime not null
)
②创建基于fruits表和customers表的插入、更新、删除触发器,该类触发器的功能是在执行相关操作时把操作相关信息写入opertaion表中。例如在fruits表中成功插入一项新的元组后,在opertaion表中自动增加一个元组,该元组描述了是对fruits表进行了插入操作。
CREATE TRIGGER insertFr AFTER INSERT ON fruits FOR EACH ROW
INSERT INTO opertaion(opname,optime) VALUES('INSERT',now());
CREATE TRIGGER updateFr AFTER UPDATE ON fruits FOR EACH ROW
INSERT INTO opertaion(opname,optime) VALUES('UPDATE',now());
CREATE TRIGGER deleteFr AFTER DELETE ON fruits FOR EACH ROW
INSERT INTO opertaion(opname,optime) VALUES('DELETE',now());
CREATE TRIGGER insertCu AFTER INSERT ON customers FOR EACH ROW
INSERT INTO opertaion(opname,optime) VALUES('INSERT',now());
CREATE TRIGGER updateCu AFTER UPDATE ON customers FOR EACH ROW
INSERT INTO opertaion(opname,optime) VALUES('UPDATE',now());
CREATE TRIGGER deleteCu AFTER DELETE ON customers FOR EACH ROW
INSERT INTO opertaion(opname,optime) VALUES('DELETE',now());
2.在fruits表中增加一个属性quantity(库存商品数量) ,数据类型int(5),默认值为1000
ALTER TABLE fruits
ADD quantity INT(5)
DEFAULT 1000
- 创建触发器实现当客户下订单后,fruits表对应此商品的数量自动的发生变化(减少或增加):
具体要求:
①在orderitems表中修改某个订单的商品数量后时, fruits表对应此商品的数量发生相应的改变。
②在orderitems表中增加一个购买详单(增加一个元组)时, fruits表对应此商品的数量发生相应的改变。
--①
CREATE TRIGGER updateF2
AFTER UPDATE ON orderitems
FOR EACH ROW
BEGIN
UPDATE fruits
SET quantity = quantity + old.quantity - new.quantity
WHERE fruits.f_id = old.f_id;
END
--②
CREATE TRIGGER insertF2
AFTER INSERT ON orderitems
FOR EACH ROW
BEGIN
UPDATE fruits SET quantity = quantity - new.quantity
WHERE fruits.f_id = new.f_id;
END
小结
1.产生的错误及原因分析
实验中产生数据无法修改与插入的错误,后经检测与验证是由于修改或插入的数据导致主键重复了。
2.体会与收获
通过该实验,能够在Navicat Premium可视化系统中对数据库进行一些列操作,掌握触发器的工作原理、定义及操作方法。同时通过解决出现的问题与错误,在解决问题的过程中能够学到更多的Mysql数据库相关的其他内容。通过后台的操控了解更多可视化数据库管理系统的功能多样与数据库的用处之广。