问题解决Can‘t update table ‘category‘ in store

news/2024/11/28 9:25:13/

问题描述:

使用spring boot的时,候访问更新数据库内容接口报错:

Error updating database. Cause: java.sql.SQLException: Can't update table 'category' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.

问题分析:

数据库更新的字段使用了更新数据库内容的触发器,而这是不被允许的

因为MySQL的限制,MySQL不允许在触发器中直接更新触发该触发器的表,也就是说在触发器中不能更新category表。

尝试解决:

为了解决这个问题,可以考虑将触发器的逻辑实现在代码层,并且删除MySQL中的触发器。这样可以绕过MySQL触发器的限制。

比如你定义了一个改一条就可以实现将所有相关的数据的值都进行更改的触发器

DELIMITER //
CREATE TRIGGER update_child_is_agriculture
BEFORE UPDATE ON category
FOR EACH ROW
BEGIN
    -- 判断是否更新了is_agriculture字段
    IF NEW.is_agriculture <> OLD.is_agriculture THEN
        -- 更新子数据的is_agriculture值
        UPDATE category
        SET is_agriculture = NEW.is_agriculture
        WHERE parent_id = OLD.cat_id;
    END IF;
END;
//
DELIMITER ;

这时,你访问端口时可能会报错:

 Error updating database.  Cause: java.sql.SQLException: Can't update table 'category' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.

先删除触发器:

DROP TRIGGER IF EXISTS trg_category_update_children_is_agriculture;

再将功能逻辑定义到你的代码中实现,再在接口调用逻辑方法就可以实现功能了

代码示例

// 更新category表的is_agriculture字段
String updateCategorySql = "UPDATE category SET is_agriculture = ? WHERE cat_id = ?";
try {
    // 开始事务
    dataSourceTransactionManager.beginTransaction();

    // 更新category表的is_agriculture字段
    jdbcTemplate.update(updateCategorySql, newIsAgricultureValue, categoryId);

    // 更新子数据的is_agriculture字段
    for (Category child : childrenToUpdate) {
        jdbcTemplate.update(updateCategorySql, newIsAgricultureValue, child.getCatId());
    }

    // 提交事务
    dataSourceTransactionManager.commitTransaction();
catch (Exception e) {
    // 回滚事务
    dataSourceTransactionManager.rollbackTransaction();
    // 处理异常
    e.printStackTrace();
}

本文由 mdnice 多平台发布


http://www.ppmy.cn/news/979227.html

相关文章

夯实数字化转型安全地基,华东某农商行开源安全治理经验

华东某农村商业银行是一家全国首批组建的股份制农村金融机构。近年来&#xff0c;该农商行坚持“科技强行”战略&#xff0c;进一步夯实数字化核心基础&#xff0c;积极推动金融科技与产品、服务的深度融合&#xff0c;努力拓展数字金融的包容性&#xff0c;让数字金融更有温度…

Java maven project XPathFctory

java Maven project, 更新了一个java库&#xff0c;项目无法编译了&#xff0c; 一直报错&#xff1a;No XPathFctory implementation found for the object model: Java 中 XPathFactory 只有抽象定义&#xff0c;没有具体实现&#xff0c;需要添加实现类&#xff0c;经过百度…

【100天精通python】Day16:python 模块的搜索目录和导入模块异常时的处理方法

目录 1 搜索模块所在目录 2 模块不在搜索目录中 2.1 添加模块所在的目录到PYTHONPATH环境变量 2.2 修改sys.path 2.3 使用绝对路径导入 2.4将模块复制到Python搜索路径中的任意一个目录 2.5 总结 3 其他导入的模块异常处理 3.1 模块未安装 3.2 模块名称拼写错误 3.3模…

实现基于UDP简易的英汉词典

文章目录 实现目标认识相关接口socketbzerobindrecvfromsendto 实现思路和注意事项完整代码Server.hppServer.ccClient.hppClient.cc 运行效果END 实现目标 实现一个服务端和一个客户端&#xff0c;客户端负责发送一个单词&#xff0c;服务端接收到后将翻译后的结果返回发送到…

Mysql基础(下)之函数,约束,多表查询,事务

&#x1f442; 回到夏天&#xff08;我多想回到那个夏天&#xff09; - 傲七爷/小田音乐社 - 单曲 - 网易云音乐 截图自 劈里啪啦 -- 黑马Mysql&#xff0c;仅学习使用 &#x1f447;原地址 47. 基础-多表查询-表子查询_哔哩哔哩_bilibili 目录 &#x1f982;函数 &#x1f3…

Excel 端口操作指南

通过将 EDI 报文可视化为 Excel&#xff0c;企业可以更好地了解和处理数据&#xff0c;提高工作效率&#xff0c;减少错误率。在未实现 EDI 系统和内部业务系统集成之前&#xff0c;Excel 方案则是一项可供选择的临时替代方案。 Excel方案的优点在于&#xff0c;无需对业务系统…

Python获取股票数据——以沪深300成分股为例

目录 1、Baostock2、Tushare pro版3、AKshare4、聚宽量化平台 需求是下载比如从2020-01-01到2022-12-31区间的沪深300成分股每支股票的日K线数据&#xff0c;没错这是个面板数据&#xff0c;原本以为直接通过Python接口可以直接下载到&#xff0c;因为之前找的上证综指啥的用R的…

高效协作处理缓存清理需求:生产者-消费者模式助力多模块缓存管理

在现代应用系统中&#xff0c;缓存是提高性能和减少数据库负载的重要手段之一。然而&#xff0c;缓存的数据在某些情况下可能会过期或者变得无效&#xff0c;因此需要及时进行清理。在复杂的应用系统中&#xff0c;可能有多个系统、多个模块产生缓存清理需求&#xff0c;而这些…