首页 > 编程知识 正文

mysql函数存储文件(mysql数据库存储文件)

时间:2023-12-23 11:38:06 阅读:319276 作者:SMGU

本文目录一览:

mysql中函数load_file()问题

1、 replace(load_file(0x2F6574632F706173737764),0x3c,0x20)

2、replace(load_file(char(47,101,116,99,47,112,97,115,115,119,100)),char(60),char(32))

上面两个是查看一个PHP文件里完全显示代码.有些时候不替换一些字符,如 替换成空格 返回的是网页.而无法查看到代码.

3、 load_file(char(47)) 可以列出FreeBSD,Sunos系统根目录

4、/etc/httpd/conf/httpd.conf或/usr/local/apche/conf/httpd.conf 查看linux APACHE虚拟主机配置文件

5、c:Program FilesApache GroupApacheconf httpd.conf 或C:apacheconf httpd.conf 查看WINDOWS系统apache文件

6、c:/Resin-3.0.14/conf/resin.conf 查看jsp开发的网站 resin文件配置信息.

7、c:/Resin/conf/resin.conf /usr/local/resin/conf/resin.conf 查看linux系统配置的JSP虚拟主机

8、d:APACHEApache2confhttpd.conf

9、C:Program Filesmysqlmy.ini

10、../themes/darkblue_orange/layout.inc.php phpmyadmin 爆路径

11、 c:windowssystem32inetsrvMetaBase.xml 查看IIS的虚拟主机配置文件

12、 /usr/local/resin-3.0.22/conf/resin.conf 针对3.0.22的RESIN配置文件查看

13、 /usr/local/resin-pro-3.0.22/conf/resin.conf 同上

14 、/usr/local/app/apache2/conf/extra/httpd-vhosts.conf APASHE虚拟主机查看

15、 /etc/sysconfig/iptables 本看防火墙策略

16 、 usr/local/app/php5/lib/php.ini PHP 的相当设置

17 、/etc/my.cnf MYSQL的配置文件

18、 /etc/redhat-release 红帽子的系统版本

19 、C:mysqldatamysqluser.MYD 存在MYSQL系统中的用户密码

20、/etc/sysconfig/network-scripts/ifcfg-eth0 查看IP.

21、/usr/local/app/php5/lib/php.ini //PHP相关设置

22、/usr/local/app/apache2/conf/extra/httpd-vhosts.conf //虚拟网站设置

23、c:Program FilesRhinoSoft.comServ-UServUDaemon.ini

24、c:windowsmy.ini

mysql 导入导出数据库以及函数、存储过程的介绍

本篇文章是对mysql中的导入导出数据库命令以及函数、存储过程进行了详细的分析介绍,需要的朋友参考下

mysql常用导出数据命令:

1.mysql导出整个数据库

mysqldump

-hhostname

-uusername

-ppassword

databasename

backupfile.sql

mysqldump

-hlocalhost

-uroot

hqgr

hqgr.sql

(如果root用户没用密码可以不写-p,当然导出的sql文件你可以制定一个路径,未指定则存放在mysql的bin目录下)

2.mysql导出数据库一个表

mysqldump

-hhostname

-uusername

-ppassword

database

tablename

导出的文件名

mysqldump

-hlocalhost

-uroot

hqgr

t_ug_user

user.sql

3.mysql导出一个数据库结构

 mysqldump

-hhostname

-uusername

-ppassword

-d

--add-drop-table

databasenamed:hqgrstructure.sql

-d

没有数据

--add-drop-table

在每个create语句之前增加一个drop

table

4.如果需要导出mysql里面的函数或者存储过程

mysqldump

-hhostname

-uusername

-ppassword

-ntd

-R

databasename

backupflie.sql

mysqldump

-hlocalhost

-uroot

-ntd

-R

hqgr

hqgr.sql

其中的

-ntd

是表示导出存储过程;-R是表示导出函数

mysql常用导入数据的命令:

1.mysql命令

mysql

-hhostname

-uusername

-

ppassword

databasename

backupfile.sql

2.source命令

mysqlsource

backupfile.sql

mysql为四个表创建储存过程或者储存函数

“另一个存储过程”的名字是sp1,没有参数,返回的结果集共3列,全部为int型,那么“存储过程”里添加一个与结果集列数相同的临时表或表变量用于接收“另一个存储过程”的结果集

如下

CREATE PROCEDURE sp2

AS

DECLARE @t table(a int,b int,c int)

INSERT INTO @t(a,b,c)

EXEC sp1

SELECT * FROM @t

使用SQLSERVER存储过程可以很大的提高程序运行速度,简化编程维护难度,现已得到广泛应用。

创建存储过程

和数据表一样,在使用之前需要创建存储过程,它的简明语法是:

引用:

Create PROC 存储过程名称

[参数列表(多个以“,”分隔)]

AS

SQL 语句

例:

引用:

Create PROC upGetUserName

@intUserId INT,

@ostrUserName NVARCHAR(20) OUTPUT -- 要输出的参数

AS

BEGIN

-- 将uName的值赋给 @ostrUserName 变量,即要输出的参数

Select @ostrUserName=uName FROM uUser Where uId=@intUserId

END

其中 Create PROC 语句(完整语句为Create PROCEDURE)的意思就是告诉SQL SERVER,现在需要建立一个存储过程,upGetUserName 就是存储过程名称,@intUserId 和 @ostrUserName 分别是该存储过程的两个参数,注意,在SQL SERVER中,所有用户定义的变量都以“@”开头,OUTPUT关键字表示这个参数是用来输出的,AS之后就是存储过程内容了。只要将以上代码在“查询分析器”里执行一次,SQL SERVER就会在当前数据库中创建一个名为“upGetUserName”的存储过程。你可以打开“企业管理器”,选择当前操作的数据库,然后在左边的树型列表中选择“存储过程”,此时就可以在右边的列表中看到你刚刚创建的存储过程了(如果没有,刷新一下即可)。

五、MYSQL存储过程和函数

• create procedure用来创建 存储过程 ,create function用来创建 函数

• Delimiter命令是改变语句的结束符 ,MySQL默认的结束符为;号,由于procedure和function中的;号并不代表创建的结束,所以要替换成另外的结束符以便表示创建的结束

• rontine_body子句可以包含一个简单的SQL语句,也可以包含多个SQL语句, 通过begin…end将这多个SQL语句 包含在一起

• MySQL存储过程和函数中也可以包含类似create和drop等DDL语句

• comment子句用来写入对存储过程和函数的注释

• Language子句用来表示此存储过程和函数的创建语言

• 存储过程和函数被标注为deterministic表明当输入相同的参数是会返回相同的结果,反之如果是not deterministic则表示相同参数不会是相同结果,默认是not deterministic

• 相关属性短语只有咨询含义,并不是强制性的约束

• Drop procedure/function语句用来 删除指定名称的存储过程或函数

• Begin…end语句通常出现在存储过程、函数和触发器中,其中 可以包含一个或多个语句 ,每个语句用;号隔开

• 标签label可以加在begin…end语句以及loop, repeat和while语句

• 语句中通过iterate和leave来控制流程,iterate表示返回指定标签位置,leave表示跳出标签

• Declare语句通常用来声明本地变量、游标、条件或者handler

• Declare语句只允许出现在begin … end语句中而且必须出现在第一行

• Declare的顺序也有要求,通常是先声明本地变量,再是游标,然后是条件和handler

• 本地变量可以通过declare语句进行声明

• 声明后的变量可以通过select … into var_list进行赋值,或者通过set语句赋值,或者通过定义游标并使用fetch … into var_list赋值

• 通过declare声明变量方法:

• MySQL支持if,case,iterate,leave,loop,while,repeat语句作为存储过程和函数中的 流程控制语句 ,另外return语句也是函数中的特定流程控制语句

• Case语句在存储过程或函数中表明了 复杂的条件选择语句

• IF语句在存储过程或函数中表明了 基础的条件选择语句

其中在 function 里面,只有 DETERMINISTIC, NO SQL 和 READS SQL DATA 被支持。如果我们开启了 bin-log, 我们就必须为我们的 function 指定一个参数。

在 MySQL 中创建函数时出现这种错误的解决方法:

set global log_bin_trust_function_creators=TRUE;

• Iterate语句 仅出现在loop,repeat,while循环语句中,其含义表示重新开始此循环

• Leave语句表明 退出指定标签的流程控制语句块

• 通常会用在begin…end,以及loop,repeat,while的循环语句中

• Loop语句是存储过程或函数中表达 循环执行 的一种方式

• repeat语句是存储过程或函数中表达 循环执行 的一种方式

• while语句是存储过程或函数中表达 循环执行 的一种方式

• Return语句用在 函数中,用来终结函数的执行并将指定值返回给调用者

• Cursor游标用来 声明一个数据集

• 游标的声明必须在变量和条件声明之后,在handler声明之前

• Cursor close语句用来 关闭之前打开的游标

• Cursor declare语句用来声明一个游标和指定游标对应的数据集合, 通常数据集合是一个select语句

• Cursor fetch语句用来获取游标指定数据集的 下一行数据 并将各个字段值赋予后面的变量

• Open cursor语句用来打开一个之前已经 声明好的游标

• Declare condition语句命名 特定的错误条件 ,而该特定错误可以在declare…handler中指定 处理方法

• 比如在MySQL中1051error code表示的是unknown table的错误,如果要对这

个错误做特殊处理,可以用三种方法:

• Declare handler语句用来声明一个handler来处理一个或多个特殊条件,当其中的某个条件满足时则触发其中的statement语句执行

• Statement可以是一个简单SQL语句,也可以是begin…end组成的多个语句

• Handler_action子句声明当执行完statement语句之后应该怎么办

Condition_value的值有以下几种:

• 当condition发生但没有声明handler时,则存储过程和函数依照如下规则处理

• create trigger语句用来创建一个触发器,触发器的作用是当表上有对应SQL语句发生时,则触发执行

• 触发器创建时需要 指定对应的表名 tbl_name

• Definer关键词用来指定trigger的安全环境

• Trigger_time指定触发器的执行时间,BEFORE和AFTER指定触发器在表中的 每行数据修改前或者后 执行

• Trigger_event指定触发该触发器的具体 事件

• INSERT当新的一行数据插入表中时触发,比如通过执行insert,load data,replace语句插入新数据

• UPDATE当表的一行数据被修改时触发,比如执行update语句时

• DELETE当表的一行数据被删除时触发,比如执行delete,replace语句时

• 当执行insert into … on duplicate key update语句时,当碰到重复行执行update时,则触发update下的触发器

• 从5.7.2版本开始,可以创建具有相同trigger_time和trigger_event的同一个表上的多个触发器,默认情况下按照创建的时间依次执行,通过 指定FOLLOWS/PRECEDES改变执行顺序 ,即FOLLOWS时表示新创建的触发器后执行,PRECEDES则表示新触发器先执行

• Trigger_body表示触发器触发之后要执行的一个或多个语句,在内部可以引用涉及表的字段, OLD.col_name表示行数据被修改或删除之前的字段数据,NEW.col_name表示行数据被插入或修改之后的字段数据

• Drop trigger语句用来 删除一个触发器

• If exists短语用来避免删除不存在的触发器时引发报错

• 当你执行drop table时,表上的触发器也被drop掉了

mysql中的函数和存储过程的区别

存储过程与函数的区别

本质上没区别,执行的本质都一样。

只是函数有如:只能返回一个变量的限制。而存储过程可以返回多个。

函数是可以嵌入在sql中使用的,可以在select中调用,而存储过程要让sql的query 可以执行, 需要把 mysql_real_connect 的最后一个参数设置为CLIENT_MULTI_STATEMENTS。

函数限制比较多,比如不能用临时表,只能用表变量.还有一些函数都不可用等等.而存储过程的限制相对就比较少。

特性区别如下:

 

1)一般来说,存储过程实现的功能要复杂一点,而函数的实现的功能针对性比较强。存储过程,功能强大,可以执行包括修改表等一系列数据库操作;用户定义函数不能用于执行一组修改全局数据库状态的操作。

 

2)对于存储过程来说可以返回参数,如记录集,而函数只能返回值或者表对象。函数只能返回一个变量;而存储过程可以返回多个。存储过程的参数可以有IN,OUT,INOUT三种类型,而函数只能有IN类~~存储过程声明时不需要返回类型,而函数声明时需要描述返回类型,且函数体中必须包含一个有效的RETURN语句。

3)存储过程,可以使用非确定函数,不允许在用户定义函数主体中内置非确定函数。

4)存储过程一般是作为一个独立的部分来执行( EXECUTE 语句执行),而函数可以作为查询语句的一个部分来调用(SELECT调用),由于函数可以返回一个表对象,因此它可以在查询语句中位于FROM关键字的后面。 SQL语句中不可用存储过程,而可以使用函数。

当存储过程和函数被执行的时候,SQL Manager会到procedure cache中去取相应的查询语句,如果在procedure cache里没有相应的查询语句,SQL Manager就会对存储过程和函数进行编译。

Procedure cache中保存的是执行计划 (execution plan) ,当编译好之后就执行procedure cache中的execution plan,之后SQL SERVER会根据每个execution plan的实际情况来考虑是否要在cache中保存这个plan,评判的标准一个是这个execution plan可能被使用的频率;其次是生成这个plan的代价,也就是编译的耗时。保存在cache中的plan在下次执行时就不用再编译了。

MYSql存储过程的作用及语法

作用:

1、使用存过过程,很多相似性的删除,更新,新增等操作就变得轻松了,并且以后也便于管理!

2、存储过程因为SQL语句已经预编绎过了,因此运行的速度比较快。

3、存储过程可以接受参数、输出参数、返回单个或多个结果集以及返回值。可以向程序返回错误原因。

4、存储过程运行比较稳定,不会有太多的错误。只要一次成功,以后都会按这个程序运行。

5、存储过程主要是在服务器上运行,减少对客户机的压力。

6、存储过程可以包含程序流、逻辑以及对数据库的查询。同时可以实体封装和隐藏了数据逻辑。

7、存储过程可以在单个存储过程中执行一系列SQL语句。

8、存储过程可以从自己的存储过程内引用其它存储过程,这可以简化一系列复杂语句。

一、创建存储过程

create procedure sp_name()

begin

.........

end12341234

二、调用存储过程

call sp_name()11

注意:存储过程名称后面必须加括号,哪怕该存储过程没有参数传递

三、删除存储过程

drop procedure sp_name//11

注意:不能在一个存储过程中删除另一个存储过程,只能调用另一个存储过程

四、区块,条件,循环

1、区块定义,常用

begin

......

end;123123

也可以给区块起别名,如:

lable:begin

...........

end lable;123123

可以用leave lable;跳出区块,执行区块以后的代码

2、条件语句

if 条件 then

statement

else

statement

end if;1234512345

3、循环语句

(1)while循环

[label:] WHILE expression DO

statements

END WHILE [label] ;1234512345

(2)、loop循环

[label:] LOOP

statements

END LOOP [label];1234512345

(3)、repeat until循环

[label:] REPEAT

statements

UNTIL expression

END REPEAT [label] ;12345671234567

五、其他常用命令

1.show procedure status

显示数据库中所有存储的存储过程基本信息,包括所属数据库,存储过程名称,创建时间等

2.show create procedure sp_name

显示某一个存储过程的详细信息

函数function示例

CREATE DEFINER=`root`@`%` FUNCTION `spr_checkadmin`(acckey varchar(32), accpwd varchar(64)) RETURNS int(11)

BEGIN

DECLARE x INT;

SELECT COUNT(*) INTO x FROM admins WHERE account=acckey AND passwd=accpwd;

RETURN(x);

END;123456123456

单个返回值的存储过程

CREATE DEFINER=`root`@`%` PROCEDURE `spr_getuserstorage`(tok varchar(128))

BEGIN

DECLARE acc VARCHAR(32);

DECLARE pkgid VARCHAR(32);

DECLARE regdate DATETIME;

DECLARE logindate DATETIME;

DECLARE sumsize BIGINT;

SELECT account INTO acc FROM userinfo WHERE token=tok;

IF (acc != NULL) THEN

SELECT SUM(filesize) INTO sumsize FROM userfiles WHERE account=acc;

SELECT packageid, registerdate, lastlogindate INTO pkgid, regdate, logindate FROM userinfo WHERE account=acc;

SELECT 0,pkgid,regdate,logindate;

ELSE

SELECT(-1);

END IF;123456789101112131415123456789101112131415

多个返回值存储过程

CREATE DEFINER=`root`@`%` PROCEDURE `spr_queryfolderallfile`(sToken varchar(32), OUT sfid varchar(32), OUT sfext varchar(32))

BEGIN

DECLARE acc CHAR(32);

SELECT account INTO acc FROM userinfo WHERE token=sToken;

IF (acc != NULL) THEN

SELECT fileid, fileext INTO sfid, sfext FROM userfiles WHERE account=acc AND filetype=1;

END IF;

END;1234567812345678

mysql 比文件存储哪个快

mysql更快。

1、直接读文件相比数据库查询效率更胜一筹,而且文中还没算上连接和断开的时间。

2、一次读取的内容越大,直接读文件的优势会越明显(读文件时间都是小幅增长,这跟文件存储的连续性和簇大小等有关系),这个结果恰恰跟书生预料的相反,说明MYSQL对更大文件读取可能又附加了某些操作(两次时间增长了近30%),如果只是单纯的赋值转换应该是差异偏小才对。

3、写文件和INSERT几乎不用测试就可以推测出,数据库效率只会更差。

4、很小的配置文件如果不需要使用到数据库特性,更加适合放到独立文件里存取,无需单独创建数据表或记录,很大的文件比如图片、音乐等采用文件存储更为方便,只把路径或缩略图等索引信息放到数据库里更合理一些。

5、PHP上如果只是读文件,file_get_contents比fopen、fclose更有效率,不包括判断存在这个函数时间会少3秒左右。

6、fetch_row和fetch_object应该是从fetch_array转换而来的,书生没看过PHP的源码,单从执行上就可以说明fetch_array效率更高,这跟网上的说法似乎相反。

实 际上在做这个试验之前,从个人经验判断就有了大概的结果,测试完成后则有种豁然开朗的感觉。假定在程序效率和关键过程相当且不计入缓存等措施的条件下,读 写任何类型的数据都没有直接操作文件来的快,不论MSYQL过程如何,最后都要到磁盘上去读这个“文件”(记录存储区等效),所以当然这一切的前提是只读 内容,无关任何排序或查找操作。

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。

MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。

MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。