当前位置:文档之家› Mysql手册20-存储过程和函数

Mysql手册20-存储过程和函数

Mysql手册20-存储过程和函数
Mysql手册20-存储过程和函数

官方网址https://www.doczj.com/doc/0116426120.html,/doc/refman/5.1/zh/optimization.html

第20章:存储程序和函数

目录

20.1.存储程序和授权表

20.2.存储程序的语法

20.2.1.CREATE PROCEDURE和CREATE FUNCTION

20.2.2.ALTER PROCEDURE和ALTER FUNCTION

20.2.3.DROP PROCEDURE和和DROP FUNCTION

20.2.4.SHOW CREATE PROCEDURE和SHOW CREATE FUNCTION 20.2.5.SHOW PROCEDURE STATUS和SHOW FUNCTION STATUS 20.2.6.CALL语句

20.2.7.BEGIN...END复合语句

20.2.8.DECLARE语句

20.2.9.存储程序中的变量

20.2.10.条件和处理程序

20.2.11.光标

20.2.12.流程控制构造

20.3.存储程序、函数、触发程序和复制:常见问题

20.4.存储子程序和触发程序的二进制日志功能

MySQL5.1版支持存储程序和函数。一个存储程序是可以被存储在服务器中的一套SQL语句。一旦它被存储了,客户端不需要再重新发布单独的语句,而是可以引用存储程序来替代。下面一些情况下存储程序尤其有用:

·当用不同语言编写多客户应用程序,或多客户应用程序在不同平台上运行且需要执行相同的数据库操作之时。

·安全极为重要之时。比如,银行对所有普通操作使用存储程序。这提供一个坚固而安全的环境,程序可以确保每一个操作都被妥善记入日志。在这样一个设置中,应用程序和用户不可能直接访问数据库表,但是仅可以执行指定的存储程序。

存储程序可以提供改良后的性能,因为只有较少的信息需要在服务器和客户算之间传送。代价是增加数据库服务器系统的负荷,因为更多的工作在服务器这边完成,更少的在客户端(应用程序)那边完成上。如果许多客户端机器(比如网页服务器)只由一个或少数几个数据库服务器提供服务,可以考虑一下存储程序。

存储程序也允许你在数据库服务器上有函数库。这是一个被现代应用程序语言共享的特征,它允许这样的内部设计,比如通过使用类。使用这些客户端应用程序语言特征对甚至于数据库使用范围以外的编程人员都有好处。

MySQL为存储程序遵循SQL:2003语法,这个语法也被用在IBM的DB2数据库上。MySQL对存储程序的实现还在进度中。所有本章叙述的语法都被支持,在有限制或扩展的地方会恰当地指出来。有关使用存储程序的限制的更多讨论在附录I,特性限制里提到。

如20.4节,“存储子程序和触发程序的二进制日志功能”里所说的,存储子程序的二进制日志功能已经完成。

20.1.存储程序和授权表

存储程序需要在mysql数据库中有proc表。这个表在MySQL5.1安装过程中创建。如果你从早期的版本升级到MySQL5.1,请确定更新你的授权表以确保proc表的存在。请参阅2.10.2节“升级授权表”。

在MySQL5.1中,授权系统如下考虑存储子程序:

·创建存储子程序需要CREATE ROUTINE权限。

·提醒或移除存储子程序需要ALTER ROUTINE权限。这个权限自动授予子程序的创建者。

·执行子程序需要EXECUTE权限。然而,这个权限自动授予子程序的创建者。同样,子程序默认的SQL SECURITY特征是DEFINER,它允许用该子程序访问数据库的用户与执行子程序联系到一起。

20.2.存储程序的语法

20.2.1.CREATE PROCEDURE和CREATE FUNCTION

20.2.2.ALTER PROCEDURE和ALTER FUNCTION

20.2.3.DROP PROCEDURE和DROP FUNCTION

20.2.4.SHOW CREATE PROCEDURE和SHOW CREATE FUNCTION

20.2.5.SHOW PROCEDURE STATUS和SHOW FUNCTION STATUS

20.2.6.CALL语句

20.2.7.BEGIN...END复合语句

20.2.8.DECLARE语句

20.2.9.存储程序中的变量

20.2.10.条件和处理程序

20.2.11.光标

20.2.12.流程控制构造

存储程序和函数是用CREATE PROCEDURE和CREATE FUNCTION语句创建的子程序。一个子程序要么是一个程序要么是一个函数。使用CALL语句来调用程序,程序只能用输出变量传回值。就像别其它函数调用一样,函数可以被从语句外调用(即通过引用函数名),函数能返回标量值。存储子程序也可以调用其它存储子程序。

在MySQL5.1中,一个存储子程序或函数与特定的数据库相联系。这里有几个意思:

·当一个子程序被调用时,一个隐含的USE db_name被执行(当子程序终止时停止执行)。存储子程序内的USE语句时不允许的。

·你可以使用数据库名限定子程序名。这可以被用来引用一个不在当前数据库中的子程序。比如,要引用一个与test数据库关联的存储程序p或函数f,你可以说CALL test.p()或test.f()。

·数据库移除的时候,与它关联的所有存储子程序也都被移除。

MySQL支持非常有用的扩展,即它允许在存储程序中使用常规的SELECT语句(那就是说,不使用光标或局部变量)。这个一个查询的结果包被简单地直接送到客户端。多SELECT 语句生成多个结果包,所以客户端必须使用支持多结果包的MySQL客户端库。这意味这客户端必须使用至少MySQL4.1以来的近期版本上的客户端库。

下面一节描述用来创建,改变,移除和查询存储程序和函数的语法。

20.2.1.CREATE PROCEDURE和CREATE FUNCTION

CREATE PROCEDURE sp_name([proc_parameter[,...]])

[characteristic...]routine_body

CREATE FUNCTION sp_name([func_parameter[,...]])

RETURNS type

[characteristic...]routine_body

proc_parameter:

[IN|OUT|INOUT]param_name type

func_parameter:

param_name type

type:

Any valid MySQL data type

characteristic:

LANGUAGE SQL

|[NOT]DETERMINISTIC

|{CONTAINS SQL|NO SQL|READS SQL DATA|MODIFIES SQL DATA}

|SQL SECURITY{DEFINER|INVOKER}

|COMMENT'string'

routine_body:

Valid SQL procedure statement or statements

这些语句创建存储子程序。要在MySQL5.1中创建子程序,必须具有CREATE ROUTINE 权限,并且ALTER ROUTINE和EXECUTE权限被自动授予它的创建者。如果二进制日志功能被允许,你也可能需要SUPER权限,请参阅20.4节,“存储子程序和触发程序的二进制日志功能”。

默认地,子程序与当前数据库关联。要明确地把子程序与一个给定数据库关联起来,可以在创建子程序的时候指定其名字为db_name.sp_name。

如果子程序名和内建的SQL函数名一样,定义子程序时,你需要在这个名字和随后括号中间插入一个空格,否则发生语法错误。当你随后调用子程序的时候也要插入。为此,即使有可能出现这种情况,我们还是建议最好避免给你自己的存储子程序取与存在的SQL函数一样的名字。

由括号包围的参数列必须总是存在。如果没有参数,也该使用一个空参数列()。每个参数默认都是一个IN参数。要指定为其它参数,可在参数名之前使用关键词OUT或INOUT

注意:指定参数为IN,OUT,或INOUT只对PROCEDURE是合法的。(FUNCTION参数总是被认为是IN参数)

RETURNS字句只能对FUNCTION做指定,对函数而言这是强制的。它用来指定函数的返回类型,而且函数体必须包含一个RETURN value语句。

routine_body包含合法的SQL过程语句。可以使用复合语句语法,请参阅20.2.7节,“BEGIN...END复合语句”。复合语句可以包含声明,循环和其它控制结构语句。这些语句的语法在本章后免介绍,举例,请参阅20.2.8节,“DECLARE语句”和20.2.12节,“流程控制构造”。

CREATE FUNCTION语句被用在更早的MySQL版本上以支持UDF(自定义函数)。请参阅27.2节,“给MySQL添加新函数”。UDF继续被支持,即使现在有了存储函数。UDF会被认为一个外部存储函数。然而,不要让存储函数与UDF函数共享名字空间。

外部存储程序的框架将在不久的将来引入。这将允许你用SQL之外的语言编写存储程序。最可能的是,第一个被支持语言是PHP,因为核心PHP引擎很小,线程安全,且可以被方便地嵌入。因为框架是公开的,它希望许多其它语言也能被支持。

如果程序或线程总是对同样的输入参数产生同样的结果,则被认为它是“确定的”,否则就是“非确定”的。如果既没有给定DETERMINISTIC也没有给定NOT DETERMINISTIC,默认的就是NOT DETERMINISTIC。

为进行复制,使用NOW()函数(或它的同义词)或RAND()函数会不必要地使得一个子程序非确定。对NOW()而言,二进制日志包括时间戳并被正确复制。RAND()只要在一个子程序被内应用一次也会被正确复制。(你可以把子程序执行时间戳和随机数种子认为强制输入,它们在主从上是同样的。)

当前来讲,DETERMINISTIC特征被接受,但还没有被优化程序所使用。然而如果二进制日志功能被允许了,这个特征影响到MySQL是否会接受子程序定义。请参阅20.4节,“存储子程序和触发程序的二进制日志功能”。

一些特征提供子程序使用数据的内在信息。CONTAINS SQL表示子程序不包含读或写数据

的语句。NO SQL表示子程序不包含SQL语句。READS SQL DATA表示子程序包含读数据的语句,但不包含写数据的语句。MODIFIES SQL DATA表示子程序包含写数据的语句。如果这些特征没有明确给定,默认的是CONTAINS SQL。

SQL SECURITY特征可以用来指定子程序该用创建子程序者的许可来执行,还是使用调用者的许可来执行。默认值是DEFINER。在SQL:2003中者是一个新特性。创建者或调用者必须由访问子程序关联的数据库的许可。在MySQL5.1中,必须有EXECUTE权限才能执行子程序。必须拥有这个权限的用户要么是定义者,要么是调用者,这取决于SQL SECURITY特征是如何设置的。

MySQL存储sql_mode系统变量设置,这个设置在子程序被创建的时候起作用,MySQL总是强制使用这个设置来执行子程序。

COMMENT子句是一个MySQL的扩展,它可以被用来描述存储程序。这个信息被SHOW CREATE PROCEDURE和SHOW CREATE FUNCTION语句来显示。

MySQL允许子程序包含DDL语句,如CREATE和DROP。MySQL也允许存储程序(但不是存储函数)包含SQL交互语句,如COMMIT。存储函数不可以包含那些做明确的和绝对的提交或者做回滚的语。SQL标准不要求对这些语句的支持,SQL标准声明每个DBMS 提供商可以决定是否允许支持这些语句。

存储子程序不能使用LOAD DATA INFILE。

返回结果包的语句不能被用在存储函数种。这包括不使用INTO给变量读取列值的SELECT 语句,SHOW语句,及其它诸如EXPLAIN这样的语句。对于可在函数定义时间被决定要返回一个结果包的语句,发生一个允许从函数错误返回结果包的Not (ER_SP_NO_RETSET_IN_FUNC)。对于只可在运行时决定要返回一个结果包的语句,发

生一个不能在给定上下文错误返回结果包的PROCEDURE%s(ER_SP_BADSELECT)。下面是一个使用OUT参数的简单的存储程序的例子。例子为,在程序被定义的时候,用mysql客户端delimiter命令来把语句定界符从;变为//。这就允许用在程序体中的;定界符被传递到服务器而不是被mysql自己来解释。

mysql>delimiter//

mysql>CREATE PROCEDURE simpleproc(OUT param1INT)

->BEGIN

->SELECT COUNT(*)INTO param1FROM t;

->END

->//

Query OK,0rows affected(0.00sec)

mysql>delimiter;

mysql>CALL simpleproc(@a);

Query OK,0rows affected(0.00sec)

mysql>SELECT@a;

+------+

|@a|

+------+

|3|

+------+

1row in set(0.00sec)

当使用delimiter命令时,你应该避免使用反斜杠(‘\’)字符,因为那是MySQL的转义字符。下列是一个例子,一个采用参数的函数使用一个SQL函数执行一个操作,并返回结果:mysql>delimiter//

mysql>CREATE FUNCTION hello(s CHAR(20))RETURNS CHAR(50) ->RETURN CONCAT('Hello,',s,'!');

->//

Query OK,0rows affected(0.00sec)

mysql>delimiter;

mysql>SELECT hello('world');

+----------------+

|hello('world')|

+----------------+

|Hello,world!|

+----------------+

1row in set(0.00sec)

如果在存储函数中的RETURN语句返回一个类型不同于在函数的RETURNS子句中指定类

型的值,返回值被强制为恰当的类型。比如,如果一个函数返回一个ENUM或SET值,但是RETURN语句返回一个整数,对于SET成员集的相应的ENUM成员,从函数返回的值是字符串。

20.2.2.ALTER PROCEDURE和ALTER FUNCTION

ALTER{PROCEDURE|FUNCTION}sp_name[characteristic...]

characteristic:

{CONTAINS SQL|NO SQL|READS SQL DATA|MODIFIES SQL DATA}

|SQL SECURITY{DEFINER|INVOKER}

|COMMENT'string'

这个语句可以被用来改变一个存储程序或函数的特征。在MySQL5.1中,你必须用ALTER ROUTINE权限才可用此子程序。这个权限被自动授予子程序的创建者。如20.4节,“存储子程序和触发程序的二进制日志功能”中所述,如果二进制日志功能被允许了,你可能也需要SUPER权限。

在ALTER PROCEDURE和ALTER FUNCTION语句中,可以指定超过一个的改变。20.2.3.DROP PROCEDURE和DROP FUNCTION

DROP{PROCEDURE|FUNCTION}[IF EXISTS]sp_name

这个语句被用来移除一个存储程序或函数。即,从服务器移除一个制定的子程序。在MySQL 5.1中,你必须有ALTER ROUTINE权限才可用此子程序。这个权限被自动授予子程序的创建者。

IF EXISTS子句是一个MySQL的扩展。如果程序或函数不存储,它防止发生错误。产生

一个可以用SHOW WARNINGS查看的警告。

20.2.4.SHOW CREATE PROCEDURE和SHOW CREATE FUNCTION

SHOW CREATE{PROCEDURE|FUNCTION}sp_name

这个语句是一个MySQL的扩展。类似于SHOW CREATE TABLE,它返回一个可用来重新创建已命名子程序的确切字符串。

mysql>SHOW CREATE FUNCTION test.hello\G

***************************1.row***************************

Function:hello

sql_mode:

Create Function:CREATE FUNCTION`test`.`hello`(s CHAR(20))RETURNS CHAR(50) RETURN CONCAT('Hello,',s,'!')

20.2.5.SHOW PROCEDURE STATUS和SHOW FUNCTION STATUS

SHOW{PROCEDURE|FUNCTION}STATUS[LIKE'pattern']

这个语句是一个MySQL的扩展。它返回子程序的特征,如数据库,名字,类型,创建者及创建和修改日期。如果没有指定样式,根据你使用的语句,所有存储程序和所有存储函数的信息都被列出。

mysql>SHOW FUNCTION STATUS LIKE'hello'\G

***************************1.row***************************

Db:test

Name:hello

Type:FUNCTION

Definer:testuser@localhost

Modified:2004-08-0315:29:37

Created:2004-08-0315:29:37

Security_type:DEFINER

Comment:

你可以从INFORMATION_SCHEMA中的ROUTINES表获得有关存储子程序的信息。请参阅23.1.14节,“INFORMATION_SCHEMA ROUTINES表”。

20.2.6.CALL语句

CALL sp_name([parameter[,...]])

CALL语句调用一个先前用CREATE PROCEDURE创建的程序。

CALL语句可以用声明为OUT或的INOUT参数的参数给它的调用者传回值。它也“返回”受影响的行数,客户端程序可以在SQL级别通过调用ROW_COUNT()函数获得这个数,从C中是调用the mysql_affected_rows()C API函数来获得。

20.2.7.BEGIN...END复合语句

[begin_label:]BEGIN

[statement_list]

END[end_label]

存储子程序可以使用BEGIN...END复合语句来包含多个语句。statement_list代表一个或多个语句的列表。statement_list之内每个语句都必须用分号(;)来结尾。

复合语句可以被标记。除非begin_label存在,否则end_label不能被给出,并且如果二者都存在,他们必须是同样的。

请注意,可选的[NOT]ATOMIC子句现在还不被支持。这意味着在指令块的开始没有交互的存储点被设置,并且在上下文中用到的BEGIN子句对当前交互动作没有影响。

使用多重语句需要客户端能发送包含语句定界符;的查询字符串。这个符号在命令行客户端被用delimiter命令来处理。改变查询结尾定界符;(比如改变为//)使得;可被用在子程序体中。

20.2.8.DECLARE语句

DECLARE语句被用来把不同项目局域到一个子程序:局部变量(请参阅20.2.9节,“存储程序中的变量”),条件和处理程序(请参阅20.2.10节,“条件和处理程序”)及光标(请参阅20.2.11节,“光标”)。SIGNAL和RESIGNAL语句当前还不被支持。

DECLARE仅被用在BEGIN...END复合语句里,并且必须在复合语句的开头,在任何其它语句之前。

光标必须在声明处理程序之前被声明,并且变量和条件必须在声明光标或处理程序之前被声明。

20.2.9.存储程序中的变量

20.2.9.1.DECLARE局部变量

20.2.9.2.变量SET语句

20.2.9.3.SELECT...INTO语句

你可以在子程序中声明并使用变量。

20.2.9.1.DECLARE局部变量

DECLARE var_name[,...]type[DEFAULT value]

这个语句被用来声明局部变量。要给变量提供一个默认值,请包含一个DEFAULT子句。值可以被指定为一个表达式,不需要为一个常数。如果没有DEFAULT子句,初始值为NULL。局部变量的作用范围在它被声明的BEGIN...END块内。它可以被用在嵌套的块中,除了那些用相同名字声明变量的块。

20.2.9.2.变量SET语句

SET var_name=expr[,var_name=expr]...

在存储程序中的SET语句是一般SET语句的扩展版本。被参考变量可能是子程序内声明的变量,或者是全局服务器变量。

在存储程序中的SET语句作为预先存在的SET语法的一部分来实现。这允许SET a=x, b=y,...这样的扩展语法。其中不同的变量类型(局域声明变量及全局和集体变量)可以被混合起来。这也允许把局部变量和一些只对系统变量有意义的选项合并起来。在那种情况下,此选项被识别,但是被忽略了。

20.2.9.3.SELECT...INTO语句

SELECT col_name[,...]INTO var_name[,...]table_expr

这个SELECT语法把选定的列直接存储到变量。因此,只有单一的行可以被取回。SELECT id,data INTO x,y FROM test.t1LIMIT1;

注意,用户变量名在MySQL5.1中是对大小写不敏感的。请参阅9.3节,“用户变量”。

重要:SQL变量名不能和列名一样。如果SELECT...INTO这样的SQL语句包含一个对列的参考,并包含一个与列相同名字的局部变量,MySQL当前把参考解释为一个变量的名字。

column n 例如,在下面的语句中,xname被解释为到xname variable的参考而不是到xname colum

的:

CREATE PROCEDURE sp1(x VARCHAR(5))

BEGIN

DECLARE xname VARCHAR(5)DEFAULT'bob';

DECLARE newname VARCHAR(5);

DECLARE xid INT;

SELECT xname,id INTO newname,xid

FROM table1WHERE xname=xname;

SELECT newname;

END;

当这个程序被调用的时候,无论table.xname列的值是什么,变量newname将返回值‘bob’。请参阅I.1节,“存储子程序和触发程序的限制”。

20.2.10.条件和处理程序

20.2.10.1.DECLARE条件

20.2.10.2.DECLARE处理程序

特定条件需要特定处理。这些条件可以联系到错误,以及子程序中的一般流程控制。

20.2.10.1.DECLARE条件

DECLARE condition_name CONDITION FOR condition_value

condition_value:

SQLSTATE[VALUE]sqlstate_value

|mysql_error_code

这个语句指定需要特殊处理的条件。它将一个名字和指定的错误条件关联起来。这个名字可以随后被用在DECLARE HANDLER语句中。请参阅20.2.10.2节,“DECLARE处理程序”。除了SQLSTATE值,也支持MySQL错误代码。

20.2.10.2.DECLARE处理程序

DECLARE handler_type HANDLER FOR condition_value[,...]sp_statement

handler_type:

CONTINUE

|EXIT

|UNDO

condition_value:

SQLSTATE[VALUE]sqlstate_value

|condition_name

|SQLWARNING

|NOT FOUND

|SQLEXCEPTION

|mysql_error_code

这个语句指定每个可以处理一个或多个条件的处理程序。如果产生一个或多个条件,指定的

语句被执行。

对一个CONTINUE处理程序,当前子程序的执行在执行处理程序语句之后继续。对于EXIT 处理程序,当前BEGIN...END复合语句的执行被终止。UNDO处理程序类型语句还不被支持。

·SQLWARNING是对所有以01开头的SQLSTATE代码的速记。

·NOT FOUND是对所有以02开头的SQLSTATE代码的速记。·SQLEXCEPTION是对所有没有被SQLWARNING或NOT FOUND捕获的SQLSTATE代码的速记。

除了SQLSTATE值,MySQL错误代码也不被支持。

例如:

mysql>CREATE TABLE test.t(s1int,primary key(s1));

Query OK,0rows affected(0.00sec)

mysql>delimiter//

mysql>CREATE PROCEDURE handlerdemo()

->BEGIN

->DECLARE CONTINUE HANDLER FOR SQLSTATE'23000'SET@x2=1;

->SET@x=1;

->INSERT INTO test.t VALUES(1);

->SET@x=2;

->INSERT INTO test.t VALUES(1);

->SET@x=3;

->END;

->//

Query OK,0rows affected(0.00sec)

mysql>CALL handlerdemo()//

Query OK,0rows affected(0.00sec)

mysql>SELECT@x//

+------+

|@x|

+------+

|3|

+------+

1row in set(0.00sec)

注意到,@x是3,这表明MySQL被执行到程序的末尾。如果DECLARE CONTINUE HANDLER FOR SQLSTATE'23000'SET@x2=1;这一行不在,第二个INSERT因PRIMARY KEY强制而失败之后,MySQL可能已经采取默认(EXIT)路径,并且SELECT@x 可能已经返回2。

20.2.11.光标

20.2.11.1.声明光标

20.2.11.2.光标OPEN语句

20.2.11.3.光标FETCH语句

20.2.11.4.光标CLOSE语句

简单光标在存储程序和函数内被支持。语法如同在嵌入的SQL中。光标当前是不敏感的,只读的及不滚动的。不敏感意为服务器可以活不可以复制它的结果表。

光标必须在声明处理程序之前被声明,并且变量和条件必须在声明光标或处理程序之前被声明。

例如:

CREATE PROCEDURE curdemo()

BEGIN

DECLARE done INT DEFAULT0;

DECLARE a CHAR(16);

DECLARE b,c INT;

DECLARE cur1CURSOR FOR SELECT id,data FROM test.t1;

DECLARE cur2CURSOR FOR SELECT i FROM test.t2;

DECLARE CONTINUE HANDLER FOR SQLSTATE'02000'SET done=1;

OPEN cur1;

OPEN cur2;

REPEAT

常用MySQL语句大全

MySQL服务的配置和使用 修改MySQL管理员的口令:mysqladmin –u root password 密码字符串 如:mysqldmin –u root password 111111 连接MySQL服务器,使用命令:mysql [-h 主机名或IP地址] [-u 用户名] [-p] 如:mysql –u root –p 如已有密码需修改root密码用命令: mysqladmin –u root –p password 新密码字符串 如:mysqladmin –u root –p password 111111 创建数据库格式为:CREATE DATABASE 数据库名称; 如:mysql>create database abc; 默认创建数据库保存在/var/lib/mysql中 查看数据库是 mysql>show abc; 选择数据库是 USE 数据库名称; 如:mysql>use abc; 删除数据库是 DROP DATABASE 数据库名称;如:mysql>drop database abc; 数据库的创建和删除 创建表是CREATE TABLE 表名称(字段1,字段2,…[表级约束]) [TYPE=表类型]; 其中字段(1,2 )格式为:字段名字段类型[字段约束] 如创建一个表student,如下: mysql>create table student ( sno varchar(7) not null, 字段不允许为空 sname varchar (20 )not null, ssex char (1) default …t?, sbirthday date, sdepa char (20), primary key (sno) 表的主键 ); 可用describe命令查看表的结构。 默认表的类型为MYISAM,并在/var/lib/mysql/abc 目录下建立student.frm(表定

MySQL函数大全

1、字符串函数 ascii(str) 返回字符串str的第一个字符的ascii值(str是空串时返回0) mysql> select ascii('2'); -> 50 mysql> select ascii(2); -> 50 mysql> select ascii('dete'); -> 100 ord(str) 如果字符串str句首是单字节返回与ascii()函数返回的相同值。 如果是一个多字节字符,以格式返回((first byte ascii code)*256+(second byte ascii code))[*256+third byte asciicode...] mysql> select ord('2'); -> 50 conv(n,from_base,to_base) 对数字n进制转换,并转换为字串返回(任何参数为null时返回null,进制范围为2-36进制,当to_base是负数时n作为有符号数否则作无符号数,conv以64位点精度工作) mysql> select conv("a",16,2); -> '1010' mysql> select conv("6e",18,8); -> '172' mysql> select conv(-17,10,-18); -> '-h' mysql> select conv(10+"10"+'10'+0xa,10,10); -> '40' bin(n) 把n转为二进制值并以字串返回(n是bigint数字,等价于conv(n,10,2)) mysql> select bin(12); -> '1100' oct(n) 把n转为八进制值并以字串返回(n是bigint数字,等价于conv(n,10,8)) mysql> select oct(12); -> '14' hex(n) 把n转为十六进制并以字串返回(n是bigint数字,等价于conv(n,10,16)) mysql> select hex(255);

常用函数大全

常用函数大全 mysql_affected_rows
mysql_affected_rows — 取得前一次 MySQL 操作所影响的记录行数 mysql_fetch_array —从结果集中取得一行作为关联数组或数字数组或二者兼 有:
mysql_fetch_array($result, MYSQL_NUM) , MYSQL_NUM 可用 MYSQL_BOTH 或
MYSQL_ASSOC 代替,也可以不写,默认为 MYSQL_BOTH
mysql_fetch_row — 从结果集中取得一行作为枚举数组: mysql_fetch_row($result); mysql_fetch_assoc($result)
mysql_fetch_row()从和指定的结果标识关联的结果集中取得一行数据并作为数组返回。每个结果 的列储存在一个数组的单元中,偏移量从 0 开始。 依次调用 mysql_fetch_row()将返回结果集中的下一行,如果没有更多行则返回 FALSE。 mysql_fetch_assoc — 从结果集中取得一行作为关联数组 :
mysql_fetch_assoc() 和用 mysql_fetch_array() 加上第二个可选参数 MYSQL_ASSOC 完全相同。它 仅仅返回关联数组。这也是 mysql_fetch_array()起初始的工作方式。如果在关联索引之外还需要数字 索引,用 mysql_fetch_array()。 如果结果中的两个或以上的列具有相同字段名,最后一列将优先。要访问同名的其它列,要么用 mysql_fetch_row()来取得数字索引或给该列起个别名。参见 mysql_fetch_array() 例子中有关别名说 明。 有一点很重要必须指出,用 mysql_fetch_assoc()并不明显 比用 mysql_fetch_row()慢,而且还提供了 明显更多的值。
mysql_query()
仅对 SELECT,SHOW,EXPLAIN 或 DESCRIBE 语句返回一个资源标识符,
如果查询执行不正确则返回 FALSE。对于其它类型的 SQL 语句,mysql_query()在执行成功时返回 TRUE,出错时返回 FALSE。非 FALSE 的返回值意味着查询是合法的并能够被服务器执行。这并不说明 任何有关影响到的或返回的行数。 很有可能一条查询执行成功了但并未影响到或并未返回任何行。

【IT专家】MySQL高级查询函数(单行函数)

本文由我司收集整编,推荐下载,如有疑问,请与我司联系 MySQL高级查询函数(单行函数) 2017/03/20 737 函数的分类:1,单行函数:对每一条记录输入值进行计算,得到相应的计算结果,返回给用户,也就是说,每条记录作为一个输入参数,经过函数计算得到每条记录的计算结果。2,多行函数:对多条记录输入值进行计算,得到多条记录对应的单个结果。 ?单行函数: ?①:字符串函数(用户处理单行的字符数据,比如大小写转换,字符串截取,拼装等) ?a.LOWER/UPPER(LOWER(str):返回字符串str变为小写字母的字符 串.UPPER(str):返回字符串str变为大写字母的字符串) SELECT UPPER(name) FROM student; //全部大写SELECT LOWER(name) FROM student; //全部小写b.CONCAT: CONCAT(str1,str2,...): 1,返回结果为连接参数产生的字符串。 2,如有任何一个参数为NULL ,则返回值为NULL 3,允许有一个或多个参数 SELECT name,age, CONCAT(name,’-’,age) FROM student;运行的结果为: ?c.INSERT:把指定(位置,长度)的子字符串替换成目标字符串 ?格式:INSERT(str,pos,len,newstr) 参数:str:(源字符串) pos:(开始插入的位置,索引从1开始) len:(替换字符串的长度) newstr:(待插入的字符串) 1,返回字符串str, 其子字符串起始于pos 位置和长度被字符串newstr取代的len 字符。2,如果pos 超过字符串长度,则返回值为原始字符串。3,假如len的长度大于其它字符串的长度,则从位置pos开始替换。4,若任何一个参数为null,则返回值为NULL示例:替换用户名名的部分字符,规则如下:保留用户名前2位,中间3位使用*代替,如果姓名还有多余的字符,保留 SELECT INSERT(name,2,3,’***’) FROM student;运行的结果为: ?d.①LENGTH:字符串所占用的字节数

mysql的日期和时间函数

mysql的日期和时间函数 这里是一个使用日期函数的例子。下面的查询选择所有 date_col 值在最后 30 天内的记录。mysql> SELECT something FROM tbl_name WHERE TO_DAYS(NOW()) - TO_DAYS(date_col) <= 30; DAYOFWEEK(date) 返回 date 的星期索引(1 = Sunday, 2 = Monday, ... 7 = Saturday)。索引值符合 ODBC 的标准。mysql> SELECT DAYOFWEEK(’1998-02-03’); -> 3 WEEKDAY(date) 返回 date 的星期索引(0 = Monday, 1 = Tuesday, ... 6 = Sunday): mysql> SELECT WEEKDAY(’1998-02-03 22:23:00’); -> 1 mysql> SELECT WEEKDAY(’1997-11-05’); -> 2 DAYOFMONTH(date) 返回 date 是一月中的第几天,范围为 1 到 31: mysql> SELECT DAYOFMONTH(’1998-02-03’); -> 3 DAYOFYEAR(date) 返回 date 是一年中的第几天,范围为 1 到 366: mysql> SELECT DAYOFYEAR(’1998-02-03’); -> 34 MONTH(date) 返回 date 中的月份,范围为 1 到 12: mysql> SELECT MONTH(’1998-02-03’); -> 2 DAYNAME(date) 返回 date 的星期名: mysql> SELECT DAYNAME("1998-02-05"); -> ’Thursday’ MONTHNAME(date) 返回 date 的月份名: mysql> SELECT MONTHNAME("1998-02-05"); -> ’February’ QUARTER(date) 返回 date 在一年中的季度,范围为 1 到 4:

常用函数 类参考

全局函数1、common.func.php 公用函数 获得当前的脚本网址 function GetCurUrl() 返回格林威治标准时间 function MyDate($format='Y-m-d H:i:s',$timest=0) 把全角数字转为半角 function GetAlabNum($fnum) 把含HTML的内容转为纯text function Html2Text($str,$r=0) 把文本转HTML function Text2Html($txt) 输出Ajax头 function AjaxHead() 中文截取2,单字节截取模式 function cn_substr($str,$slen,$startdd=0) 把标准时间转为Unix时间戳 function GetMkTime($dtime) 获得一个0000-00-00 00:00:00 标准格式的时间 function GetDateTimeMk($mktime) 获得一个0000-00-00 标准格式的日期 function GetDateMk($mktime) 获得用户IP function GetIP() 获取拼音以gbk编码为准 function GetPinyin($str,$ishead=0,$isclose=1)

dedecms通用消息提示框 function ShowMsg($msg,$gourl,$onlymsg=0,$limittime=0) 保存一个cookie function PutCookie($key,$value,$kptime=0,$pa="/") 删除一个cookie function DropCookie($key) 获取cookie function GetCookie($key) 获取验证码 function GetCkVdValue() 过滤前台用户输入的文本内容 // $rptype = 0 表示仅替换html标记 // $rptype = 1 表示替换html标记同时去除连续空白字符// $rptype = 2 表示替换html标记同时去除所有空白字符// $rptype = -1 表示仅替换html危险的标记 function HtmlReplace($str,$rptype=0) 获得某文档的所有tag function GetTags($aid) 过滤用于搜索的字符串 function FilterSearch($keyword) 处理禁用HTML但允许换行的内容 function TrimMsg($msg) 获取单篇文档信息 function GetOneArchive($aid)

mysql内置函数表

MySQL内置函数表(包括字符串函数、数学函数和日期时间函数) _____________________________________________________________________ ASCII(str) 返回字符串str的第一个字符的ASCII值(str是空串时返回0) mysql> select ASCII('2'); -> 50 mysql> select ASCII(2); -> 50 mysql> select ASCII('dete'); -> 100 _____________________________________________________________________ ORD(str) 如果字符串str句首是单字节返回与ASCII()函数返回的相同值。 如果是一个多字节字符,以格式返回((first byte ASCII code)*256+(second byte ASCII code))[*256+third byte ASCII code...] mysql> select ORD('2'); -> 50 _____________________________________________________________________ CONV(N,from_base,to_base) 对数字N进制转换,并转换为字串返回(任何参数为NULL时返回NULL,进制范围为2-36进制,当to_base是负数时N作为有符号数否则作无符号数,CONV以64位点精度工作) mysql> select CONV("a",16,2); -> '1010' mysql> select CONV("6E",18,8); -> '172' mysql> select CONV(-17,10,-18); -> '-H' mysql> select CONV(10+"10"+'10'+0xa,10,10); -> '40' _____________________________________________________________________ BIN(N) 把N转为二进制值并以字串返回(N是BIGINT数字,等价于CONV(N,10,2)) mysql> select BIN(12); -> '1100' OCT(N) 把N转为八进制值并以字串返回(N是BIGINT数字,等价于CONV(N,10,8)) mysql> select OCT(12); -> '14' _____________________________________________________________________ HEX(N) 把N转为十六进制并以字串返回(N是BIGINT数字,等价于CONV(N,10,16)) mysql> select HEX(255); -> 'FF'

MySQL常用函数

一、数学函数 ABS(x) 返回x的绝对值 BIN(x) 返回x的二进制(OCT返回八进制,HEX返回十六进制) CEILING(x) 返回大于x的最小整数值 EXP(x) 返回值e(自然对数的底)的x次方 FLOOR(x) 返回小于x的最大整数值 GREATEST(x1,x2,...,xn)返回集合中最大的值 LEAST(x1,x2,...,xn) 返回集合中最小的值 LN(x) 返回x的自然对数 LOG(x,y)返回x的以y为底的对数 MOD(x,y) 返回x/y的模(余数) PI()返回pi的值(圆周率) RAND()返回0到1内的随机值,可以通过提供一个参数(种子)使RAND()随机数生成器生成一个指定的值。 ROUND(x,y)返回参数x的四舍五入的有y位小数的值 SIGN(x) 返回代表数字x的符号的值 SQRT(x) 返回一个数的平方根 TRUNCATE(x,y) 返回数字x截短为y位小数的结果 二、聚合函数(常用于GROUP BY从句的SELECT查询中) AVG(col)返回指定列的平均值 COUNT(col)返回指定列中非NULL值的个数 MIN(col)返回指定列的最小值 MAX(col)返回指定列的最大值 SUM(col)返回指定列的所有值之和 GROUP_CONCAT(col) 返回由属于一组的列值连接组合而成的结果 三、字符串函数 ASCII(char)返回字符的ASCII码值 BIT_LENGTH(str)返回字符串的比特长度 CONCAT(s1,s2...,sn)将s1,s2...,sn连接成字符串 CONCAT_WS(sep,s1,s2...,sn)将s1,s2...,sn连接成字符串,并用sep字符间隔 INSERT(str,x,y,instr) 将字符串str从第x位置开始,y个字符长的子串替换为字符串instr,返回结果 FIND_IN_SET(str,list)分析逗号分隔的list列表,如果发现str,返回str在list中的位置LCASE(str)或LOWER(str) 返回将字符串str中所有字符改变为小写后的结果 LEFT(str,x)返回字符串str中最左边的x个字符 LENGTH(s)返回字符串str中的字符数

MySQL存储过程实例教程

MySQL存储过程实例教程 MySQL 5.0以后的版本开始支持存储过程,存储过程具有一致性、高效性、安全性和体系结构等特点,本节将通过具体的实例讲解PHP是如何操纵MySQL存储过程的。 实例261:存储过程的创建 这是一个创建存储过程的实例 录像位置:光盘mingrisoft9?lt;/p> 实例说明 为了保证数据的完整性、一致性,提高应用的性能,常采用存储过程技术。MySQL 5.0之前的版本并不支持存储过程,随着MySQL技术的日趋完善,存储过程将在以后的项目中得到广泛的应用。本实例将介绍在MySQL 5.0以后的版本中创建存储过程。 技术要点 一个存储过程包括名字、参数列表,以及可以包括很多SQL语句的SQL语句集。下面为一个存储过程的定义过程: create procedure proc_name (in parameter integer)begindeclare variable varchar(20);if parameter=1 thenset variable='MySQL';elseset variable='PHP';end if;insert into tb (name) values (variable);end; MySQL中存储过程的建立以关键字create procedure开始,后面紧跟存储过程的名称和参数。MySQL的存储过程名称不区分大小写,例如PROCE1()和proce1()代表同一个存储过程名。存储过程名不能与MySQL数据库中的内建函数重名。 存储过程的参数一般由3部分组成。第一部分可以是in、out或inout。in表示向存储过程中传入参数;out表示向外传出参数;inout表示定义的参数可传入存储过程,并可以被存储过程修改后传出存储过程,存储过程默认为传入参数,所以参数in可以省略。第二部分为参数名。第三部分为参数的类型,该类型为MySQL数据库中所有可用的字段类型,如果有多个参数,参数之间可以用逗号进行分割。 MySQL存储过程的语句块以begin开始,以end结束。语句体中可以包含变量的声明、控制语句、SQL查询语句等。由于存储过程内部语句要以分号结束,所以在定义存储过程前应将语句结束标志“;”更改为其他字符,并且该字符在存储过程中出现的几率也应该较低,可以用关键字delimiter更改。例如: mysql>delimiter // 存储过程创建之后,可用如下语句进行删除,参数proc_name指存储过程名。 drop procedure proc_name 实现过程

MYSQL内置函数大全

mysql内置函数大全 ASCII(str) 返回字符串str的第一个字符的ASCII值(str是空串时返回0) mysql>select ASCII('2'); ->50 mysql>select ASCII(2); ->50 mysql>select ASCII('dete'); ->100 ORD(str) 如果字符串str句首是单字节返回与ASCII()函数返回的相同值。如果是一个多字节字符,以格式返回((first byte ASCII code)*256+(second byte ASCII code))[*256+third byte ASCII code...] mysql>select ORD('2'); ->50 CONV(N,from_base,to_base) 对数字N进制转换,并转换为字串返回(任何参数为NULL时返回NULL,进制范围为2-36进制,当to_base是负

数时N作为有符号数否则作无符号数,CONV以64位点精度工作) mysql>select CONV("a",16,2); ->'1010' mysql>select CONV("6E",18,8); ->'172' mysql>select CONV(-17,10,-18); ->'-H' mysql>select CONV(10+"10"+'10'+0xa,10,10); ->'40' BIN(N) 把N转为二进制值并以字串返回(N是BIGINT数字,等价于CONV(N,10,2)) mysql>select BIN(12); ->'1100' OCT(N) 把N转为八进制值并以字串返回(N是BIGINT数字,等价于CONV(N,10,8)) mysql>select OCT(12); ->'14' HEX(N)

MySQL加密函数用法

加密函数 a) 函数AES_ENCRYPT(str ,key_str ) , AES_DECRYPT(crypt_str ,key_str ) 函数使用说明:这些函数允许使用官方AES 进行加密和数据加密( 高级加密标准) 算法, 即以前人们所熟知的“Rijndael” 。保密关键字的长度为128 比特,不过你可以通过改变源而将其延长到256 比特。我们选择了128 比特的原因是它的速度要快得多,且对于大多数用途而言这个保密程度已经够用。 b) 函数DECODE(crypt_str ,pass_str ) 函数使用说明:使用pass_str 作为密码,解密加密字符串crypt_str ,crypt_str 应该是由ENCODE() 返回的字符串。 c) 函数ENCODE(str ,pass_str ) 函数使用说明:使用pass_str 作为密码,解密str 。使用DECODE() 解密结果。 d) 函数DES_DECRYPT(crypt_str [,key_str ]) 函数使用说明:使用DES_ENCRYPT() 加密一个字符串。若出现错误,这个函数会返回NULL 。 e) 函数DES_ENCRYPT(str [,(key_num |key_str )]) 函数使用说明:用Triple-DES 算法给出的关键字加密字符串。若出现错误,这个函数会返回NULL 。 f) 函数ENCRYPT(str [,salt ]) 函数使用说明:使用Unix crypt() 系统调用加密str 。salt 参数应为一个至少包含2 个字符的字符串。若没有给出salt 参数,则使用任意值。

MySQL存储过程简单入门

MySQL存储过程语法 1、概念 存储过程就是能完成一定操作的一组SQL语句。 2、作用 大大提高效率(存储过程本身执行速度非常快,而且,调用存储过程大大减少数据库交互次数);提高重用性。 3、使用方法 1、创建: create procedure sp_name() begin …… end 注意:可能有参数。 2、调用: call sp_name() 注意:括号不能省略。 3、删除: drop procedure sp_name 注意:没有括号,不能在一个存储过程中删除另一个存储过程,只能调用。 4、语句: 条件语句, if 条件then statement else statement end if while循环语句, [label:] while expression do statement end while [label]; loop循环语句, [label:] loop statement end loop [label];

repeat until循环语句, [label] repeat statement until expression end repeat [label]; 5、常用命令: show procedure status:显示数据库所有存储过程基本信息。 show create procedure sp_name:显示一个存储过程详细信息。 关于运算符和基本函数与Java有些区别,用时注意就行。 4、实例 1、创建: create procedure proc_name (in parameter integer) begin declare variable varchar(20); if parameter=1 then set variable='MySQL'; else set variable='PHP'; end if; insert into tb (name) values (variable); end; 注意:代码不区分大小写;存储过程之间以及存储过程与内建函数不能同名; 存储过程参数(in传入,out传出,inout可传入,修改后传出,缺省是in); 由于存储过程内部要以分号结束,需要delimiter进行更改。 2、实现: ⑴、mysql –u用户名–p用户密码 ⑵、delimiter //(将结束符号“;”改成“//”,避免与存储过程冲突) ⑶、use 数据库名 ⑷、……(创建存储过程) ⑸、call proc_name(5)//(调用存储过程) -------------------------------------------- call proc_name(@para)//(对应存储过程定义中out的输出) select @para// ⑹、show procedure status//与show create procedure proc_name// 3、程序代码调用:(out型的部分代码) try{ //调取out型的存储过程P(计算记录总数) stmt = conn.prepareCall("{call p(?)}"); //读取所有OUT型的存储过程的返回参数数据 stmt.registerOutParameter(1, Types.INTEGER); stmt.execute(); int i= stmt.getInt(1);

实验六 MySql存储过程

实验六MySql存储过程 一、实验目的 1、熟悉MySql的存储过程 二、实验内容 1、建立一张学生表,属性有学号、姓名、年龄三个字段。 2、建立一个存储过程,实现学生的全查询 3、分别用IN 和OUT实现姓名的调用 4、声明一个变量,把变量加1,再把变量加入到学生表的学号字段中。 5、建立一个存储过程,外部调用这个存储过程,当外部传入的值是0时,则在学生表中插入一个学号是17的学生,如果是1时,则在学生表中插入一个学号是18的学生,如果都不是,则在学生表中插入一个学号是19的学生. 6、建立一个存储过程,做一个循环语句,循环插入5个学生。(至少用三种循环的存储过程方法) 三、试验结果截图 1.建立一张学生表,属性有学号、姓名、年龄三个字段。 2.建立一个存储过程,实现学生的全查询

3.分别用IN 和OUT实现姓名的调用 4.声明一个变量,把变量加1,再把变量加入到学生表的学号字段中。

5.建立一个存储过程,外部调用这个存储过程,当外部传入的值是0时,则在学生表中插入一个学号是17的学生,如果是1时,则在学生表中插入一个学号是18的学生,如果都不是,则在学生表中插入一个学号是19的学生.

6建立一个存储过程,做一个循环语句,循环插入5个学生。(至少用三种循环的存储过程方法) 所有代码: 1. create table stu( stuno int, stuna varchar(20), stuage int ); insert into stu values(001,'zhangsan',22);

insert into stu values(002,'lisi',23); insert into stu values(003,'wangwu',23); insert into stu values(004,'maliu',24); insert into stu values(005,'zhaoqi',25); insert into stu values(006,'gaoba',23); insert into stu values(007,'ddddd',22); insert into stu values(008,'ttttt',21); 2. create procedure select_all() select * from stu; 3. delimiter // create procedure searchno( in no int, out na varchar(20), out age int ) begin select stuna from stu where stuno=no into na; select stuage from stu where stuno=no into age; end // delimiter ; call searchno(n,@na,@age); select @na,@age; 4. delimiter // create procedure noupdate( in n int) begin update stu set stuno=stuno+n; end // delimiter ; 5. delimiter // create procedure addstu( in sno int ) begin case sno when 0 then insert into stu values(17,'no17',20); when 1 then insert into stu values(18,'no18',20); else insert into stu values(19,'no19',20); end case; end //

MySQL函数大全 及用法示例

字符串函数 ASCII(str) 返回字符串str的第一个字符的ASCII值(str是空串时返回0) mysql> select ASCII('2'); -> 50 mysql> select ASCII(2); -> 50 mysql> select ASCII('dete'); -> 100 ORD(str) 如果字符串str句首是单字节返回与ASCII()函数返回的相同值。 如果是一个多字节字符,以格式返回((first byte ASCII code) *256+(second byte ASCII code))[*256+third byte ASCII code...] mysql> select ORD('2'); -> 50 CONV(N,from_base,to_base) 对数字N进制转换,并转换为字串返回(任何参数为NULL时返回NULL,进制范围为2-36进制,当to_base是负数时N作为有符号数否则 作无符号数,CONV以64位点精度工作) mysql> select CONV("a",16,2); -> '1010' mysql> select CONV("6E",18,8); -> '172' mysql> select CONV(-17,10,-18); -> '-H' mysql> select CONV(10+"10"+'10'+0xa,10,10); -> '40' BIN(N) 把N转为二进制值并以字串返回(N是BIGINT数字,等价于CONV (N,10,2)) mysql> select BIN(12); -> '1100'

MySQL存储过程练习

存储过程实验 一、实验要求: 1.理解存储过程的概念 2.掌握存储过程的语法格式、使用方法 3.掌握存储过程的创建、执行 二、实验内容: (注意:做一下实验需要首先建立数据及其相应的表,并输入一些记录) 1.实验1:创建一个存储过程,实现查询表student中的记录信息,并执行存储过 程 (1)创建存储过程: begin select * from student end (2)执行存储过程:运行 sp_liststudent (3)执行结果如下:

2.实验2.创建一个存储过程,根据给定的学生学号返回该学生的姓名(1)创建存储过程:

CREATE PROCEDURE test5( IN id int) BEGIN SELECT * from student s WHERE s.id=id; END (2)执行存储过程:CALL test5(2) 执行结果如下: 3.实验3. 创建一个存储过程,根据班级的编号,统计该班人数,并将人数以输出 变量返回给用户。 (1)创建存储过程: CREATE PROCEDURE test00( IN roomidint) BEGIN SELECT COUNT(*) from student s WHERE s.roomid=9; END (2)执行存储过程:CALL test00(2) (3)执行结果如下:

4.实验4:创建一个存储过程查询学号为“020101”的学生的平均分是否超过了85 分,若超过则输出“ X X考出了高分”,否则输出“XX 考的一般”。 (1)创建存储过程: CREATE PROCEDURE test05() BEGIN IF (SELECT score from student WHERE id=1)>85 THEN SELECT '考得好'; ELSE SELECT '考得不好'; END IF; END

adodb常用函数

Connect($host,[$user],[$password],[$database]) 对服务器或资料来源$host 非持续性连结,使用者认证代码为$user ,密码为$password ,如果 服务器支持多数据库,则指定连结到数据库$database。 连结成功回传true ,失败则回传false 。 注意:如果你使用的是Microsoft ADO,而非OLEDB,你可以设定$database 参数为你正在使用 的OLEDB 资料供应器。 Execute($sql,$inputarr=false) 执行SQL 指令$sql ,如果成功,就回传一个对应的ADORecordSet 对象。要注意的是这个指令 如果执行成功时,一定会回传一个数据集,即使是执行insert 或update 指令也一样。 回传对应的ADORecordSet 对象。例如,如果连结的是mysql ,那么ADORecordSet_mysql 将会 被回传。当SQL指令执行失败时会回传false 值。 ErrorMsg() 回传最后状态或是错误讯息。即使没有错误发生,本函数也会回传一个字符串。一般情况下,你不 需要呼叫这个函数,除非ADODB函数因为错误状态回传了false值。 注意:如果debug 旗标被激活了,SQL 错误讯息将会在Execute函数被呼叫时发生错误后出现。 Close( ) 关闭数据库的连结。PHP4 以数据库连结结束时不需要特别去清除而享有盛名,因为其参考

计数机 制会自动帮我们清除掉。 GetOne($sql) Executes the SQL and returns the first field of the first row as an array. The recordset and remaining rows are discarded for you automatically. If an error occur, false is returned. 执行SQL指令,并且以数组的方式回传第一笔记录的第一个字段。资料集及其余的记录将会被自动 清除,如果发生错误,就回传false 值。 译者注:这个功能在验证某笔记录在不在特别有用,可以减少系统内存及资源的用量。GetRow($sql) 执行SQL指令,并且以数组的方式回传第一笔记录。资料集及其余的记录将会被自动清除,如果发生错误,就回传false 值。 Affected_Rows( ) 回传被SQL指令更新或被删除掉的数据笔数。如果数据库不支持,回传一个false 值。 目前interbase/firebird 不支持本函数。 Insert_ID( ) 回传最后插入时的自动增进值ID。如果系统不支持,回传false。 只支持有提供自动增进或对象ID 的数据库,目前像是PostgreSQL, MySQL 以及MSSQL 都有。 PostgreSQL 回传一个OID,可以在数据库重加载时改变。只有使用持续连结方式,当你完成一笔

PHP操作mysql函数详解

PHP操作mysql函数详解 PHP操作mysql函数详解,没有学过mysql和php交互的朋友可以自己看看这些函数 1. 建立和关闭连接 1) mysql_connect() resource mysql_connect([string hostname [:port][:/path/to/socket][,string username] [,string password]]) 所有参数都是可选的 举例: @mysql_connect("localhost", "user", "password") or die("Could not connect to mysql server!"); 注意,@符号表示禁止失败尝试导致的任何错误信息,用户将看到的是die()中指定的错误信息. 注意,当与多个mysql进行连接时,必须指定每个连接的链接ID,如下: $link1 = @mysql_connect("server1", "user", "password") or die("Could not connect to mysql server!"); $link2 = @mysql_connect("server2", "user", "password") or die("Could not connect to mysql server!"); 2) mysql_pconnect() resource mysql_pconnect([string hostname [:port][:/path/to/socket][,string username] [,string password]]) 与mysql_connect()不同的是:会首先查找现有链接,不存在时才创建. 注意,不需要显示关闭连接(mysql_close()),因为连接将放在池中,所以叫持久连接. 3) mysql_close() boolean mysql_close([resource link_id]) 关闭连接不是必须的,因为可以由mysql的垃圾回收来处理. 如果没有指定link_id,则关闭最近的链接. 2. 选择数据库 mysql_select_db() boolean mysql_select_db(string db_name [, resource link_id]) 3. 查询MySql 1) mysql_query() resource mysql_query(string query [,resource link_id]) 负责执行query. 2) mysql_db_query()

MySQL的存储过程导出和导入

MySQL的存储过程导出和导入 表结构等已经在目标数据库中存在,不想拷贝数据库过去,MySQL的存储过程导出和导入,Mysqldump工具可以实现,具体用法为: [root@localhost bin]# mysqldump -uroot -p -hlocalhost -P3306 -n -d -t -R DBName > procedure_name.sql 参数说明: -n: --no-create-db -d: --no-data -t: --no-create-info -R: --routines Dump stored routines (functions and procedures) Mysqldump是客户端工具用来备份数据库或在不同数据库之间进行数据迁移。备份内容包含创建活装载表的SQL语句: 主要参数介绍: 1.连接选项 -u,--user=name -p,--password=name -h,--host=name -P,--port=# 2.输出内容选项 --add-drop-database --add-drop-table -n;--no-create-db -d;--no-data -t;--no-create-info 3.输出格式选项 --compact -c --complete-insert -T(指定数据表中的数据备份为单纯的数据文件和建表SQL两个文件) 注意:xx.sql建表文件是以linux的root用户创建,而xx.txt文件则是一linux的mysql 用户创建,因此这两个文件的存放路径一定要保证mysql用户有读写创建文件的权限。 --fields-terminated-by=name(域分隔符) --fields-enclosed-by=name(域引用符) --fields-optionally-enclosed-by=name(域引用可选字符) --fields-escaped-by=name(转义字符) 4.字符集选项 --default--character-set=xx 5.其他选项

相关主题
文本预览
相关文档 最新文档