【数据库】触发器(未完成)

触发器是什么?

可以把它想象成一个陷阱

  • 触发事件就像是触发 “陷阱” 的条件,比如当有数据插入、更新或删除这些操作发生时,就好像是有人或者某个东西触碰到了 “陷阱” 的机关。
  • 触发条件则像是 “陷阱” 的保险装置,只有当满足特定的条件时,“陷阱” 才会真正起作用。也就是说,不是只要有插入、更新或删除操作就一定会触发触发器,还得看是否满足额外设定的触发条件,就像有些陷阱需要踩到特定的位置或者达到一定的重量等条件才会触发。
  • 触发动作就是 “陷阱” 被触发后所执行的一系列操作啦,比如 “陷阱” 可能会弹出一个笼子把人困住,或者释放出一些烟雾等,对应到数据库中就是执行一些如插入新记录、更新数据、删除数据等具体的 SQL 操作。

触发器的定义:

MySQL 中定义触发器

语法
CREATE TRIGGER trigger_name
{BEFORE | AFTER} {INSERT | UPDATE | DELETE} ON table_name
FOR EACH ROW
trigger_body;
  • trigger_name:触发器的名称,需要保证在数据库中唯一。
  • BEFORE | AFTER:指定触发器是在触发事件之前还是之后执行。
  • INSERT | UPDATE | DELETE:指定触发事件的类型。
  • table_name:触发器所关联的表名。
  • FOR EACH ROW:表示对受影响的每一行数据都执行一次触发器操作(行级触发器)。
  • trigger_body:触发器要执行的 SQL 语句。
  • 示例
  • 假设有两个表:orders(订单表)和 order_logs(订单日志表)。当向 orders 表中插入一条新订单记录时,我们希望在 order_logs 表中记录下插入操作的相关信息。

-- 创建订单表
CREATE TABLE orders (
    order_id INT AUTO_INCREMENT PRIMARY KEY,
    product_name VARCHAR(100),
    quantity INT
);

-- 创建订单日志表
CREATE TABLE order_logs (
    log_id INT AUTO_INCREMENT PRIMARY KEY,
    order_id INT,
    action VARCHAR(20),
    log_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- 创建触发器
DELIMITER //

CREATE TRIGGER after_insert_order
AFTER INSERT ON orders
FOR EACH ROW
BEGIN
    INSERT INTO order_logs (order_id, action)
    VALUES (NEW.order_id, 'INSERT');
END //

DELIMITER ;

在上述示例中:

  • after_insert_order 是触发器的名称。
  • AFTER INSERT 表示在 orders 表插入操作之后触发。
  • FOR EACH ROW 表示对插入的每一行数据都执行触发器。
  • NEW 是 MySQL 中用于引用插入操作中新插入的行的关键字。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值