You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求创建MySQL触发器:更新Form表时同步调整Book表colBook值

实现Form表更新return_date时同步更新Book表colBook的触发器

要实现你描述的逻辑,我们可以创建一个AFTER UPDATE触发器,在Form表的return_date字段被更新后,自动关联更新对应的Book表记录。以下是完整的实现步骤和代码:

1. 修正表结构中的语法问题

首先注意到你提供的Book表创建语句有语法错误(末尾缺少闭合括号),修正后的语句如下:

Create table Book ( 
  idBook int not null primary key auto_increment, 
  name varchar(45) not null, 
  colBook int(11) null
);

同时Form表的插入语句需要补充idBook字段(因为该字段是NOT NULL约束),修正后:

Insert into Form (idForm, date_of_issue, idBook) Values(1, "2018-11-11", 1);

Book表的插入语句需要给字符串类型的name值添加单引号:

Insert into Book (idBook, name, colBook) Values(1, 'Garri Potter', 5);

2. 创建核心触发器

我们需要创建一个触发器,监听Form表的UPDATE操作,当return_date字段被修改时,对关联的Book表执行colBook = colBook + 1的更新:

DELIMITER //
CREATE TRIGGER update_book_colbook_after_form_return
AFTER UPDATE ON Form
FOR EACH ROW
BEGIN
    -- 仅当return_date字段确实发生变化时执行更新(避免重复操作)
    IF NEW.return_date != OLD.return_date THEN
        UPDATE Book
        SET colBook = colBook + 1
        WHERE idBook = NEW.idBook;
    END IF;
END //
DELIMITER ;

触发器逻辑说明:

  • AFTER UPDATE ON Form:指定在Form表完成更新操作后触发这个触发器
  • FOR EACH ROW:对每一条被更新的Form记录执行触发器逻辑
  • IF NEW.return_date != OLD.return_date:确保只有当return_date字段的值被修改时才执行后续更新,比如从NULL设置为实际归还日期,避免重复设置同一日期时触发无效操作
  • UPDATE Book ... WHERE idBook = NEW.idBook:找到当前更新的Form记录关联的Book,将其colBook字段加1

3. 验证触发器效果

执行你提供的更新请求:

update Form set return_date = "2000-03-03" where idBook = 1;

之后查询Book表的对应记录:

SELECT colBook FROM Book WHERE idBook = 1;

你会看到colBook的值从初始的5变为6,完全符合需求逻辑。

内容的提问来源于stack exchange,提问作者w7ve

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:12:19