MariaDB存储的功能

问题描述

我目前在所有类方法中的PHP文件中都编写了所有SQL查询。是否可以将所有这些查询移到数据库中的存储过程或存储函数中,并从PHP中简单地将相应的值/参数传递给它们?

我已经阅读了一些文档,但仍然不清楚。

谢谢。 :)

解决方法

大多数查询都可以移到存储过程中,但可能不是全部。请参阅which SQL statements cannot be used in stored procedures上mariadb的文档:

  • 更改视图;您可以改用CREATE或REPLACE VIEW。加载数据和
  • 加载表。允许INSERT DELAYED,但是语句已处理
  • 作为常规INSERT。
  • 锁定表和解锁表。
  • 对存储例程内已准备好的语句中的局部变量的引用(改为使用用户定义的变量)。
  • BEGIN(WORK)被视为BEGIN END块的开始,而不是事务,因此需要使用START TRANSACTION。
  • 允许的数量 递归调用限于max_sp_recursion_depth。如果这个变数 为0(默认),禁用递归。该限制不适用于 存储的功能。
  • 已准备好的大多数语句 语句在存储程序中是不允许的。请参阅准备 语句:允许的语句列表,可以是 使用。
  • SIGNAL,RESIGNAL和GET DIAGNOSTICS是例外,可能是 用于存储例程

话虽如此,即使可以将SQL语句移入存储过程,但由于代码复杂性或性能原因,您可能不一定要这样做。

,
DELIMITER $$
create procedure `accounting`.`delete_invoice_line` (invoice_line_id INT)
BEGIN
delete from invoice_line where id = invoice_line_id;
END;
$$
DELIMITER ;

我必须弄清楚创建过程的格式。我正在遵循此模式,它似乎工作正常。然后授予用户名的执行权限。

谢谢大家的投入。 :)