如何解决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 ;
我必须弄清楚创建过程的格式。我正在遵循此模式,它似乎工作正常。然后授予用户名的执行权限。
谢谢大家的投入。 :)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。