授课课时:2 授课地点:三教202
授课形式:教学做合一
教学目标
(一)知识目标:
- 理解触发器的定义和作用。
- 掌握触发器的创建和使用方法。
(二)能力目标:
- 能够编写基本的触发器。
- 能够调试和优化触发器的运行。
(三)素质目标:
- 提升逻辑思考和编程能力。
- 增强对数据库操作的理解和应用能力。
教学重难点
(一)重点:掌握触发器的基本语法和创建方法。
(二)难点:理解触发器的触发条件和触发事件的使用场景。
教学资源
教科书、PPT、 Navicat 、’头歌’在线实验平台
教学方法
(一)教法
1.讲授法 2.示范法 3.讨论法
(二)学法
1.自主学习 2.实践操作 3.归纳总结
教学过程设计
(一)课前任务
预习触发器定义、作用、语法;观看教学视频。
(二)课程导入
今天我们将学习数据库触发器,理解其定义和作用,并掌握创建和使用方法。
(三)知识储备:
1、触发器的概念
触发器(Trigger)是由数据库管理系统自动执行的一种特殊的存储过程
2、触发器的类型
- AFTER 触发器:在指定操作之后触发。
- INSTEAD OF 触发器:替代指定操作执行。
- FOR 触发器:等同于 AFTER 触发器。
3、创建和使用触发器
- 创建触发器:
- 创建一个 AFTER INSERT 触发器,在插入新记录时自动执行特定操作。
CREATE TRIGGER trgAfterInsertOrder
ON Orders
AFTER INSERT
AS
BEGIN
-- 示例操作:记录插入时间到日志表
INSERT INTO OrderLog (OrderID, LogDate)
SELECT OrderID, GETDATE()
FROM inserted;
END;
2查看触发器:
- 查看数据库中已创建的触发器。
SELECT * FROM sys.triggers;
删除触发器:
- 删除不需要的触发器。
DROP TRIGGER trgAfterInsertOrder;
(四)项目实战
模拟一个简单的银行账户管理系统
1.创建账户表(accounts)
CREATE TABLE accounts (
account_no VARCHAR(20) PRIMARY KEY,
balance DECIMAL(10,2) NOT NULL,
account_type VARCHAR(20) NOT NULL
);
2.创建审计表(audit_log)用于记录余额变动
CREATE TABLE audit_log (
log_id INT AUTO_INCREMENT PRIMARY KEY,
account_no VARCHAR(20) NOT NULL,
old_balance DECIMAL(10,2) NOT NULL,
new_balance DECIMAL(10,2) NOT NULL,
operation VARCHAR(10) NOT NULL,
operation_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
3.创建触发器,在账户余额发生变化时更新审计表
DELIMITER $$
CREATE TRIGGER trg_accounts_audit
AFTER UPDATE ON accounts
FOR EACH ROW
BEGIN
IF OLD.balance <> NEW.balance THEN
INSERT INTO audit_log (account_no, old_balance, new_balance, operation)
VALUES (OLD.account_no, OLD.balance, NEW.balance, 'UPDATE');
END IF;
END$$
DELIMITER ;
4.创建触发器,在插入或删除账户记录时记录操作日志
DELIMITER $$
CREATE TRIGGER trg_accounts_insert
AFTER INSERT ON accounts
FOR EACH ROW
BEGIN
INSERT INTO audit_log (account_no, old_balance, new_balance, operation)
VALUES (NEW.account_no, 0, NEW.balance, 'INSERT');
END$$
CREATE TRIGGER trg_accounts_delete
AFTER DELETE ON accounts
FOR EACH ROW
BEGIN
INSERT INTO audit_log (account_no, old_balance, new_balance, operation)
VALUES (OLD.account_no, OLD.balance, 0, 'DELETE');
END$$
DELIMITER ;
5.创建触发器,在扣款前检查余额是否满足最低要求
DELIMITER $$
CREATE TRIGGER trg_accounts_update
BEFORE UPDATE ON accounts
FOR EACH ROW
BEGIN
DECLARE min_balance DECIMAL(10,2);
IF NEW.account_type = 'Savings' THEN
SET min_balance = 1000;
ELSEIF NEW.account_type = 'Checking' THEN
SET min_balance = 500;
ELSE
SET min_balance = 0;
END IF;
IF NEW.balance < min_balance THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'Balance cannot be lower than minimum requirement';
END IF;
END$$
DELIMITER ;
在这个项目中,我们创建了三个触发器:
trg_accounts_audit
在账户余额发生变化时,记录旧余额和新余额到审计表中。trg_accounts_insert
和trg_accounts_delete
在插入或删除账户记录时,分别记录插入和删除操作到审计表中。trg_accounts_update
在更新账户余额前,检查新余额是否满足该账户类型的最低余额要求。如果不满足,则抛出错误并终止操作。
通过这个项目,你可以向学生演示如何创建和使用触发器,以及触发器在数据审计、业务规则强制等方面的应用。你还可以进一步扩展项目需求,比如添加利息计算、交易记录等功能,以涵盖更多触发器的使用场景。
课程总结
本节课学习了触发器的定义、作用、基本语法及其创建和使用。
课后作业
编写一个存储过程,接收一个日期范围,并返回该日期范围内的订单总数。
课后反思
注重学生的需求和反馈,不断优化教学方法和内容