Mysql创建自定义函数
在使用mysql的过程中,mysql本身的功能可能无法满足我们的业务需求。这时候就需要定制功能了。
函数包括数学函数、字符串函数、日期和时间函数、条件判断函数、系统信息函数、加密函数、格式化函数等。这些功能可以简化用户的操作。
在MySQL中,函数的使用方式与MySQL中的内部函数相同。
mysql函数的使用算不算创建储存过程?
函数是函数,存储过程是存储过程,二者最大的区别就是函数有返回值
mysql中rownum函数用法?
mysql中rownumber用法如下:
该函数用于返回其分区内每一行的序列号。它是一种窗口函数。行号从1开始到分区中存在的行数。该函数语法为:ROW_NUMBER() OVER (<partition_definition> <order_definition>) 。其中partition_definition语法如下:PARTITION BY <expression>,
PARTITION BY子句将行分成更小的集合。表达式可以是将在GROUP BY子句中使用的任何有效表达式。您可以使用以逗号分隔的多个表达式。
PARTITION BY条款是可选项。如果省略它,则整个结果集被视为分区。但是,当您使用PARTITION BY子句时,每个分区也可以被视为一个窗口。
order_definition语法如下所示:
ORDER BY <expression> ,
ORDER BY子句的目的是设置行的顺序。此ORDER BY子句独立ORDER BY于查询的子句。
具体用法有以下三种情况:
1.使用row_number()函数进行编号,如:
select email,customerID, ROW_NUMBER() over(order by psd) as rows from QT_Customer
原理:先按psd进行排序,排序完后,给每条数据进行编号。
2.在订单中按价格的升序进行排序,并给每条记录进行排序代码如下:
select DID,customerID,totalPrice,ROW_NUMBER() over(order by totalPrice) as rows from OP_Order
3.统计出每一个各户的所有订单并按每一个客户下的订单的金额 升序排序,同时给每一个客户的订单进行编号。这样就知道每个客户下几单了。
mysql中如何查看函数创建时间?
方法:
查看数据库表的创建时间可以在information_schema中查看
information_schema数据库表说明:
SCHEMATA表:提供了当前mysql实例中所有数据库的信息。是show databases的结果取之此表。
TABLES表:提供了关于数据库中的表的信息(包括视图)。详细表述了某个表属于哪个schema,表类型,表引擎,创建时间等信息。是show tables from schemaname的结果取之此表。
数据库表的创建时间在TABLES表中的CREATE_TIME字段
SELECT CREATE_TIME FROM TABLES WHERE TABLE_SCHEMA='数据库名' AND TABLE_NAME='表名';
将上面的数据库名以及表名替换为所要查询的数据即可。
PHP编程之高级技巧——利用Mysql函数?
构建当前需求最严苛应用程序的最佳实践和专家技能,作为世界上最流行、最通用的开放源代码脚本语言,PHP经常会与MySQL一起被用于构建大业务量、处理关键任务的应用程序。《PHP+MySQL弩家编程》详细介绍了经过证实的、作者测试过的最佳实践和专家技能,能够用于构建需求最严苛的MySQL驱动的PHP应用程序。 还介绍了使用用户自定义函数扩展MySQL的方法、编写PHP扩展,以及当单独使用PHP和MySQL无法解决问题时可用的其他技术和第三方工具。主要内容回顾了设计模式、复杂查询和高级正则表达式等必要技术讨论选代和闭包等高级PHP概念使用Gearman说明如何在Web应用程序中执行多任务使用memcached在MySQL和PHPWeb应用程序中讨论缓存的使用讨论建立PHP扩展和MySQL用户自定义函数的方法说明如何使用Sphinx-在PHPWeb应用程序中实现搜索功能。
在PHP中如何正确创建函数?
tep 1 =>
php的扩展模块都放在 ext/ 目录下,比如说 snmp模块、mysql模块。 我们要建立自己的模块,就要在ext目录下为自己的模块建一个目录。比如,我们要做一个分析config文件的模块,命名为pconfig模块(parse config的简写),需在ext下建立目录pconfig。将我写好的7个文件copy到该目录下,另外需对主目录下的configure和internal_functions.c作一些修改。
Step 2 =>
Makefile.am Makefile.in
是模板文件,用户执行configure时,会调用这两个文件,生成编译时所用的Makefile文件。修改时将小写的pconfig换成你自己的模块名,别忘了把大写的PCONFIG也替换掉(不要告诉我你不会vi的替换语句)。config.m4也是执行configure将会调用的检测脚本程序,以后我们来讨论这些脚本程序的更深入的修改。现在你只需要把pconfig该成你的模块就可以了。对config.h.stub和setup.stub也如法炮制。其实setup.stub也没什么用。
Step 3 =>
php3-pconfig.h 头文件中
extern php3_module_entry pconfig_module_entry;
#define pconfig_module_ptr &pconfig_module_entry
#define phpext_pconfig_ptr pconfig_module_ptr
这几行定义了模块的入口,将入口注册到php后,php会通过模块入口找到你写的函数
下面几个函数定义是用宏进行定义的,展开以后其实就是 php3_minit_pconfig , php3_rinit_pconfig ……分别在你的模块初试化或结束时被调用,如果你的模块很简单,也就不需要这些定义了
extern PHP_MINIT_FUNCTION(pconfig);
extern PHP_RINIT_FUNCTION(pconfig);
extern PHP_MSHUTDOWN_FUNCTION(pconfig);
PHP_MINFO_FUNCTION(pconfig);
这是你的函数声明,将来写在php脚本语句中的函数名就是在PHP_FUNCTION中定义的名字。
PHP_FUNCTION(pconfig_test);
如果有多个,还可以继续往下加
PHP_FUNCTION(pconfig_parsefile);
PHP_FUNCTION(pconfig_release); …….
Step 4 =>
接下来我们看最重点的C代码了
function_entry pconfig_functions = {
PHP_FE(pconfig_test, NULL)
{NULL, NULL, NULL}
};
定义的是你的函数的入口(前面我们提到过模块的入口),按照格式将你在头文件中定义的函数写进去吧。注意,这是用宏定义的,不要管语法是否正确。以后我们具体讨论这些宏的用法。
php3_module_entry pconfig_module_entry = {
“pconfig”, pconfig_functions, PHP_MINIT(pconfig), PHP_MSHUTDOWN(pconfig), PHP_RINIT(pconfig), NULL, PHP_MINFO(pconfig), STANDARD_MODULE_PROPERTIES
};
注册模块的入口信息,比如模块名,函数接口,初试化模块将调用的函数等等,如果你的模块不执行复杂操作的话,可以忽略掉他们,写成
php3_module_entry pconfig_module_entry = {
“pconfig”, pconfig_functions, NULL,NULL,NULL,NULL,NULL,STANDARD_MODULE_PROPERTIES
};
Step 5 =>
写你自己的函数
在头文件和function_entry处,我们已经定义了自己的函数pconfig_test,现在我们就来实现pconfig_test的功能。就比如执行两个数相加的和吧。
static void _php3_pconfig_test(INTERNAL_FUNCTION_PARAMETERS)
{ ……
}
PHP_FUNCTION(pconfig_test)
{
_php3_pconfig_test(INTERNAL_FUNCTION_PARAM_PASSTHRU);
}
当系统调用pconfig_test时,会调用你的_php3_pconfig_test函数,当然你也可以把_php3_pconfig_test里的内容直接写在PHP_FUNCTION(pconfig_test)中,这样做只是程序结构比较清晰。注意:不要将_php3_pconfig_test命名成php3_pconfig_test,PHP_FUNCTION(pconfig_test)宏展开后实际上就是php3_pconfig_test!
Step 6 =>
好了,现在我们开始修改configure,在echo $ac_n “checking for MySQL support””… $ac_c” 1>&6的前面(当然,如果你熟悉configure的话,可以加在任何合适的地方)加上下面几句话
if test “${with_pconfig+set}” = set; then
withval=”$with_pconfig”
# Add your lib in here
EXTRA_LIBS=”$EXTRA_LIBS”
# Add your include path in here
INCLUDES=”$INCLUDES”
EXT_SUBDIRS=”$EXT_SUBDIRS pconfig”
EXT_LIBS=”$EXT_LIBS pconfig/libphpext_pconfig.a”
EXTINFO_DEPS=”$EXTINFO_DEPS ../ext/pconfig/extinfo.c.stub”
EXT_STATIC=”$EXT_STATIC pconfig”
fi
修改internal_functions.c,在头文件定义中加入#include “ext/pconfig/php3_pconfig.h”
在zend_module_entry数组中加入phpext_pconfig_ptr,
Step 7 =>
从新configure,带上需要的参数,不要忘记的是在参数里加入 –with-pconfig
Step 8 =>
index.php3
<? echo pconfig_test(123,678).”
“; ?>
执行%>php index.php3