【问题标题】:mysql: use a procedure inside a triggermysql:在触发器内使用过程
【发布时间】:2017-06-13 09:02:11
【问题描述】:

我需要在触发器中调用一个修改 root 密码的过程。 这是程序

delimiter //
create procedure foobar ()
begin SET PASSWORD FOR 'root'@'localhost' = 'foobar';
end//
delimiter ;

这就是触发器

delimiter //
create trigger rootpass
after delete on map
for each row
begin
call foobar;
end //
delimiter ;

似乎语法是正确的,但是当我启动删除时出现此错误

ERROR 1445 (HY000): 不允许从存储的函数或触发器设置自动提交

所以我想我正在尝试做一件被禁止的事情,有什么办法可以在 mysql 中工作吗? 我知道整个事情听起来很奇怪/可怕,但这是我的应用程序了解某些内容已被删除的方式。

【问题讨论】:

  • 在一个过程中修改root密码是没有意义的。某个地方的某个人完全解决了错误的问题。
  • 是的,这毫无意义,100% 同意,我是个傻瓜,这是一件很糟糕的事情。尽管如此,我还是需要知道这在技术上是否可以通过一些肮脏的技巧来实现,如果我问是因为我需要测试一些外部代码的证明。
  • 我已经在下面回答了你的问题,但是...... “不过,我需要知道这在技术上是否可以通过一些肮脏的伎俩,如果我问是因为我需要测试证明一些外部代码。” ...这句话感觉就像你在玩游戏,这里...我们更喜欢questions about your actual problem, not questions about your attempted solution
  • 好的,我的实际问题是使用 mysql 的引擎无法检索查询状态,我必须找到一种方法向应用程序发出查询已完成的信号,因此一种方法是中断与db,这向应用发出信号,表明发生了什么事。之后我可以重新建立通信并继续。这就是我想更改根 psw 的原因。另一种选择是关闭服务器,或者更改端口,这可以通过查询来完成吗?

标签: mysql triggers procedures


【解决方案1】:

在执行语句 would cause an implicit commit of the current transaction 时,触发器或存储函数中不允许该语句。

这包括由触发器或函数调用的存储过程中的语句——这里没有使无效操作更有效的抽象层。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-12
    • 1970-01-01
    相关资源
    最近更新 更多