准备好的语句在存储过程中使用时是否应该解除分配?

Vic*_*tor 6 mysql stored-procedures prepared-statement

在存储过程中使用预准备语句时,是否应在程序结束时取消分配,或者无关紧要,为什么?

一些代码解释:

CREATE PROCEDURE getCompanyByName (IN name VARCHAR(100))
NOT DETERMINISTIC
BEGIN
  PREPARE gcbnStatement FROM 'SELECT * FROM Companies WHERE name=? LIMIT 1';
  SET @companyName = name;
  EXECUTE gcbnStatement USING @companyName;
  DEALLOCATE PREPARE gcbnStatement;
END $$
Run Code Online (Sandbox Code Playgroud)

那么 - DEALLOCATE语句应该存在吗?干杯!

/胜利者

ska*_*man 7

根据MySQL文档:

准备好的语句特定于创建它的会话.如果在不释放先前准备的语句的情况下终止会话,则服务器会自动解除分配.

所以,不,我不打算明确地做,除非你有非常长时间运行的会话.

  • MySQL文档还说:“准备好的语句对于会话也是全局的。如果在存储的例程中创建准备好的语句,则在存储的例程结束时_it不会被释放。” 因此,我将在执行完成后显式取消分配。 (2认同)