帮助SP和UDF?

时间:2011-05-04 19:00:10

标签: php mysql sql user-defined-functions

我正在尝试使用MySQL和PHP学习和使用SP(存储过程)和UDF(用户定义函数)。 SP和UDF有什么区别?目的是什么?

如果一个简单的代码片段在PHP和SQL中看起来如何,而SP正在更新,编写或从MySQL数据库中的表中获取内容?需要了解并了解使用SP和UDF的重点。

提供帮助!谢谢!

1 个答案:

答案 0 :(得分:4)

存储过程

存储过程是由MySQL编写并执行的MySQL代码。

存储功能的示例

CREATE FUNCTION AreWeThereYet(Location integer) RETURNS boolean
BEGIN
  Return 0;
END

存储过程示例

CREATE PROCEDURE InsertRow(A integer)
BEGIN
  INSERT INTO table1 VALUES(A);
END

UDF的

UDF是C(++)或类似的代码,编译为.so (linux)或.dll (windows)

使用如下命令插入MySQL:

CREATE FUNCTION metaphon RETURNS STRING SONAME 'udf_example.so'; //linux
CREATE FUNCTION metaphon RETURNS STRING SONAME 'udf_example.dll'; //windows

<强>小结
UDF很复杂,存储过程很简单 你可以在SO中找到很多关于存储过程的例子 因为UDF更复杂,所以如果你发现存储的函数/存储过程不再适合你,我只会使用它们(缓慢/不够强大等等)

<强>链接
有关存储过程的更多信息,请参阅:
http://dev.mysql.com/doc/refman/5.1/en/stored-routines.html

有关UDF的更多信息,请参阅:
http://dev.mysql.com/doc/refman/5.1/en/udf-compiling.html

关于存储过程的好SO问题
调试:How do you debug MySQL stored procedures?
与php一起使用?:Should PHP developers use MySQL's stored procedures?
观点还是sproc?:MySQL: Views vs Stored Procedures
使用sproc进行更新:mysql procedure to update numeric reference in previous rows when one is updated
在sproc中提出和处理错误:How to raise an error within a MySQL function

如何从php调用存储过程
这真的只是另一个查询

-- normal select
$query = "SELECT * FROM table1";
-- call to stored proc
$query = "CALL InsertARow('1')";
-- use a stored function
$query = "SELECT AreWeThereYet('10')";
-- or
$query = "SELECT * FROM table1 WHERE AreWeThereYet(field1) = '1' ";
祝你好运。