mysql - #1442 - 无法更新存储函数/触发器中的表,因为它已被使用
问题描述
我有一张名为 permitissued 的表。当我进行插入时,我希望调用触发器并更新 BRIMSCode 列。当我运行时,我收到错误 #1442 - Can't update table 'permitissued' in stored function/trigger 因为它已被调用此存储函数/触发器的语句使用。
DROP TRIGGER IF EXISTS `updatePermitissuedBRIMSCode`;CREATE DEFINER=`root`@`localhost` TRIGGER `updatePermitissuedBRIMSCode` AFTER INSERT ON `permitissued` FOR EACH ROW UPDATE permitissued SET permitissued.BRIMSCode=(SELECT ParentBRIMSCode FROM subcategorycharges WHERE permitissued.ActivityCode = subcategorycharges.BRIMSCode)
这是我的 sql 插入
INSERT INTO `businesses`.`permitissued` (`id`, `BusinessID`, `BillNo`, `ReceiptNo`, `CalenderYear`, `ActivityCode`, `SBPFee`, `RegistrationFee`, `DateIssued`, `AmountBilled`, `AmountPaid`, `Period`, `StartDate`, `EndDate`, `DateModified`, `printable`, `businessStatus`, `Status`, `BRIMSCode`) VALUES (NULL, '55555', '55555', '55555', '2020', '5', '5', '4', '4', '4', '4', '1', '4', '4', '4', '4', '1', '1', '0')
解决方案
您可以改用BEFORE INSERT
触发器并覆盖该BRIMSCode
值:
DROP TRIGGER IF EXISTS `updatePermitissuedBRIMSCode`;
CREATE DEFINER=`root`@`localhost` TRIGGER `updatePermitissuedBRIMSCode`
BEFORE INSERT ON `permitissued`
FOR EACH ROW
SET NEW.BRIMSCode = (SELECT ParentBRIMSCode
FROM subcategorycharges
WHERE NEW.ActivityCode = subcategorycharges.BRIMSCode)
推荐阅读
- flutter - 使套接字类可用于整个应用程序
- php - WooCommerce 中特定产品类别的最低购物车数量
- c - 如何将函数中使用的变量传递给 C 中另一个函数中的变量?
- java - 为什么在 Java 中使用 RestTemplate 时客户端异常中缺少我的错误消息正文?
- c++ - 当代码在共享库中时,静态变量是否会重新初始化?
- reactjs - 带有 Socket io 的 Redux 中间件
- ios - 尝试从 json 数据加载图像 url 时索引超出范围
- groovy - methodMissing 的 Groovy 缓存不起作用
- node.js - npx create-react-app 返回“超出最大调用堆栈大小”
- latex - 如何在 p5.js 中显示漂亮的数学方程式?