在 MySQL 中执行存储函数或触发器时,可能会遇到错误:
Error: Can't update table 'brandnames' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
尝试从存储函数或触发器内更新表时会发生此错误,由于潜在的死锁或无限递归而禁止这样做
INSERT 触发器,例如提供的触发器:
CREATE TRIGGER `capital` AFTER INSERT ON `brandnames` FOR EACH ROW UPDATE brandnames SET bname = CONCAT( UCASE( LEFT( bname, 1 ) ) , LCASE( SUBSTRING( bname, 2 ) ) )
尝试在 INSERT 操作仍处于活动状态时更新品牌名称表。 MySQL 会阻止这种情况,以保持数据完整性并避免潜在的错误。
要解决此问题,请考虑使用以下方法:
例如,以下触发器将根据 full_name 列中的值更新small_name 列:
CREATE TRIGGER `capital` BEFORE INSERT ON `brandnames` FOR EACH ROW BEGIN SET NEW.small_name = CONCAT(UCASE(LEFT(NEW.full_name,1)) , LCASE(SUBSTRING(NEW.full_name,2))) END
以上是为什么 MySQL 会阻止存储函数和触发器中的表修改?的详细内容。更多信息请关注PHP中文网其他相关文章!