欢迎光临
我们一直在努力

课题:触发器

授课课时:2 授课地点:三教202
授课形式:教学做合一

教学目标

(一)知识目标:

  1. 理解触发器的定义和作用。
  2. 掌握触发器的创建和使用方法。

(二)能力目标:

  1. 能够编写基本的触发器。
  2. 能够调试和优化触发器的运行。

(三)素质目标:

  1. 提升逻辑思考和编程能力。
  2. 增强对数据库操作的理解和应用能力。

教学重难点
(一)重点:掌握触发器的基本语法和创建方法。
(二)难点:理解触发器的触发条件和触发事件的使用场景。

教学资源
教科书、PPT、 Navicat 、’头歌’在线实验平台

教学方法
(一)教法
1.讲授法 2.示范法 3.讨论法
(二)学法
1.自主学习 2.实践操作 3.归纳总结

教学过程设计
(一)课前任务
预习触发器定义、作用、语法;观看教学视频。

(二)课程导入
今天我们将学习数据库触发器,理解其定义和作用,并掌握创建和使用方法。

(三)知识储备:

1、触发器的概念

触发器(Trigger)是由数据库管理系统自动执行的一种特殊的存储过程

2、触发器的类型

  • AFTER 触发器:在指定操作之后触发。
  • INSTEAD OF 触发器:替代指定操作执行。
  • FOR 触发器:等同于 AFTER 触发器。

3、创建和使用触发器

  1. 创建触发器
    • 创建一个 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 ;

在这个项目中,我们创建了三个触发器:

  1. trg_accounts_audit在账户余额发生变化时,记录旧余额和新余额到审计表中。
  2. trg_accounts_inserttrg_accounts_delete在插入或删除账户记录时,分别记录插入和删除操作到审计表中。
  3. trg_accounts_update在更新账户余额前,检查新余额是否满足该账户类型的最低余额要求。如果不满足,则抛出错误并终止操作。

通过这个项目,你可以向学生演示如何创建和使用触发器,以及触发器在数据审计、业务规则强制等方面的应用。你还可以进一步扩展项目需求,比如添加利息计算、交易记录等功能,以涵盖更多触发器的使用场景。

课程总结

本节课学习了触发器的定义、作用、基本语法及其创建和使用。

课后作业

编写一个存储过程,接收一个日期范围,并返回该日期范围内的订单总数。

课后反思

注重学生的需求和反馈,不断优化教学方法和内容

赞(0) 打赏
未经允许不得转载:留留工作室 » 课题:触发器

评论 抢沙发

更好的WordPress主题

支持快讯、专题、百度收录推送、人机验证、多级分类筛选器,适用于垂直站点、科技博客、个人站,扁平化设计、简洁白色、超多功能配置、会员中心、直达链接、文章图片弹窗、自动缩略图等...

联系我们联系我们

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续提供更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫

微信扫一扫

登录

找回密码

注册