mysql存储过程保存在哪,mysql 存储过程存在什么地方
mysql存储过程保存在哪,mysql 存储过程存在什么地方详细介绍
本文目录一览: mysql 存储过程存在什么地方
如果想查看存储过程的话:
show procedure status;
想看存储过程代码:
show create procedure procedure_name;
存储过程存放在infomation_schema.ROUTINES表内。
mysql如何创建存储过程
存储过程(Stored Procedure):一组可编程的函数,是为了完成特定功能的SQL语句集,经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(需要时)来调用执行。推荐课程:MySQL教程。优点(为什么要用存储过程?):①将重复性很高的一些操作,封装到一个存储过程中,简化了对这些SQL的调用②批量处理:SQL+循环,减少流量,也就是“跑批”③统一接口,确保数据的安全相对于oracle数据库来说,MySQL的存储过程相对功能较弱,使用较少。一、存储过程的创建和调用>存储过程就是具有名字的一段代码,用来完成一个特定的功能。>创建的存储过程保存在数据库的数据字典中。1、创建存储过程CREATE [DEFINER = { user | CURRENT_USER }]PROCEDURE sp_name ([proc_parameter[,...]]) [characteristic ...] routine_bodyproc_parameter: [ IN | OUT | INOUT ] param_name typecharacteristic: COMMENT 'string' | LANGUAGE SQL | [NOT] DETERMINISTIC | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA } | SQL SECURITY { DEFINER | INVOKER }routine_body:Valid SQL routine statement[begin_label:] BEGIN[statement_list]??END [end_label]#创建数据库,备份数据表用于示例操作mysql> create database db1;mysql> use db1; mysql> create table PLAYERS as select * from TENNIS.PLAYERS;mysql> create table MATCHES as select * from TENNIS.MATCHES;示例:创建一个存储过程,删除给定球员参加的所有比赛mysql> delimiter $$#将语句的结束符号从分号;临时改为两个$$(可以是自定义)mysql> CREATE PROCEDURE delete_matches(IN p_playerno INTEGER) -> BEGIN -> DELETE FROM MATCHES -> WHERE playerno = p_playerno; -> END$$Query OK, 0 rows affected (0.01 sec)mysql> delimiter ;#将语句的结束符号恢复为分号解析:默认情况下,存储过程和默认数据库相关联,如果想指定存储过程创建在某个特定的数据库下,那么在过程名前面加数据库名做前缀;在定义过程时,使用DELIMITER $$ 命令将语句的结束符号从分号 ; 临时改为两个$$,使得过程体中使用的分号被直接传递到服务器,而不会被客户端(如mysql)解释。二、存储过程的参数存储过程可以有0个或多个参数,用于存储过程的定义。3种参数类型:IN输入参数:表示调用者向过程传入值(传入值可以是字面量或变量)OUT输出参数:表示过程向调用者传出值(可以返回多个值)(传出值只能是变量)INOUT输入输出参数:既表示调用者向过程传入值,又表示过程向调用者传出值(值只能是变量)1、in输入参数mysql> delimiter $$mysql> create procedure in_param(in p_in int) -> begin -> select p_in; -> set p_in=2; -> select P_in; -> end$$mysql> delimiter ;mysql> set @p_in=1;mysql> call in_param(@p_in);+------+| p_in |+------+| 1 |+------++------+| P_in |+------+| 2 |+------+mysql> select @p_in;+-------+| @p_in |+-------+| 1 |+-------+#以上可以看出,p_in在存储过程中被修改,但并不影响@p_id的值,因为前者为局部变量、后者为全局变量。2、out输出参数mysql> delimiter //mysql> create procedure out_param(out p_out int) -> begin -> select p_out; -> set p_out=2; -> select p_out; -> end -> //mysql> delimiter ;mysql> set @p_out=1;mysql> call out_param(@p_out);+-------+| p_out |+-------+| NULL |+-------+#因为out是向调用者输出参数,不接收输入的参数,所以存储过程里的p_out为null+-------+| p_out |+-------+| 2 |+-------+mysql> select @p_out;+--------+| @p_out |+--------+| 2 |+--------+#调用了out_param存储过程,输出参数,改变了p_out变量的值3、inout输入参数mysql> delimiter $$mysql> create procedure inout_param(inout p_inout int) -> begin -> select p_inout; -> set p_inout=2; -> select p_inout; -> end -> $$mysql> delimiter ;mysql> set @p_inout=1;mysql> call inout_param(@p_inout);+---------+| p_inout |+---------+| 1 |+---------++---------+| p_inout |+---------+| 2 |+---------+mysql> select @p_inout;+----------+| @p_inout |+----------+| 2 |+----------+#调用了inout_param存储过程,接受了输入的参数,也输出参数,改变了变量注意:①如果过程没有参数,也必须在过程名后面写上小括号例:CREATE PROCEDURE sp_name ([proc_parameter[,...]]) ??②确保参数的名字不等于列的名字,否则在过程体中,参数名被当做列名来处理强烈建议:>输入值使用in参数;>返回值使用out参数;>inout参数就尽量的少用。
mysql存储过程是什么样
相关免费学习:mysql数据库(视频)mysql存储过程是:1、什么是存储过程存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程。2、创建存储过程格式:DELIMITER $$CREATE PROCEDURE `ProcedureName`(paramName paramType)BEGINEND$$DELIMITER ;红色字体解释:ProcedureName:你要创建的存储过程名称paramName:参数名称paramType:参数类型注:(1) 存储过程是否需要参数根据实际情况而定(括号内容可不填);(2) MySQL从5.0开始支持存储过程;(3) DELIMITER 和 DELIMITER ; 是分隔符的意思,它们的作用就是让编译器知道它们里面的内容是存储过程的,如果不写这两部分,则编译器会将这段代码当作普通的SQL执行;(4) BEGIN 和 END 之间就是存储过程的内容,我们的SQL都是在这中间编写;3、存储过程的优缺点(1) 执行速度快。由于存储过程已经预编译了,使用的时候直接跳过编译部分,所以执行速度会变快;(2) 减少网络流量。使用存储过程的时候只需要调用存储过程的方法即可,相对于SQL语句存储过程的方法名更短,网络传输调用存储过程的语句,减少了网络流量;(3) 复用性。一次创建,满足需求的情况下可以随便使用;
mysql 存储过程 是什么意思
用select...into语句
下面是mysql 5.0的帮助文档的:
这个SELECT语法把选定的列直接存储到变量。因此,只有单一的行可以被取回。
SELECT id,data INTO x,y FROM test.t1 LIMIT 1;
注意,用户变量名在MySQL 5.1中是对大小写不敏感的。请参阅9.3节,“用户变量”。
重要: SQL变量名不能和列名一样。如果SELECT ... INTO这样的SQL语句包含一个对列的参考,并包含一个与列相同名字的局部变量,MySQL当前把参考解释为一个变量的名字。例如,在下面的语句中,xname 被解释为到xname variable 的参考而不是到xname column的:
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 table1 WHERE xname = xname;
SELECT newname;
END;
当这个程序被调用的时候,无论table.xname列的值是什么,变量newname将返回值‘bob’。
存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它。
一个存储过程是一个可编程的函数,它在数据库中创建并保存。它可以有SQL语句和一些特殊的控制结构组成。当希望在不同的应用程序或平台上执行相同的函数,或者封装特定功能时,存储过程是非常有用的。数据库中的存储过程可以看做是对编程中面向对象方法的模拟。它允许控制数据的访问方式。
存储过程通常有以下优点:
存储过程增强了SQL语言的功能和灵活性。存储过程可以用流控制语句编写,有很强的灵活性,可以完成复杂的判断和较复杂的运算。
存储过程允许标准组件是编程。存储过程被创建后,可以在程序中被多次调用,而不必重新编写该存储过程的SQL语句。而且数据库专业人员可以随时对存储过程进行修改,对应用程序源代码毫无影响。
存储过程能实现较快的执行速度。如果某一操作包含大量的Transaction-SQL代码或分别被多次执行,那么存储过程要比批处理的执行速度快很多。因为存储过程是预编译的。在首次运行一个存储过程时查询,优化器对其进行分析优化,并且给出最终被存储在系统表中的执行计划。而批处理的Transaction-SQL语句在每次运行时都要进行编译和优化,速度相对要慢一些。
存储过程能过减少网络流量。针对同一个数据库对象的操作(如查询、修改),如果这一操作所涉及的Transaction-SQL语句被组织程存储过程,那么当在客户计算机上调用该存储过程时,网络中传送的只是该调用语句,从而大大增加了网络流量并降低了网络负载。
存储过程可被作为一种安全机制来充分利用。系统管理员通过执行某一存储过程的权限进行限制,能够实现对相应的数据的访问权限的限制,避免了非授权用户对数据的访问,保证了数据的安全。
MySQL存储过程创建的格式如下:
CREATE PROCEDURE 过程名 ([过程参数[,...]])[特性 ...] 过程体
举例代码如下:
CREATE PROCEDURE proc1(OUT s int) BEGIN SELECT COUNT(*) INTO s FROM user; END存储过程根据需要可能会有输入、输出、输入输出参数,这里有一个输出参数s,类型是int型,如果有多个参数用","分割开。
过程体的开始与结束使用BEGIN与END进行标识。
注意:MySQL在5.0以前并不支持存储过程
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
databasename>d: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命令
mysql>source
backupfile.sql
mysql 存储过程中的select into outfile语句生成的文件放哪里
表数据导出到一个文本文件最简单的方法是使用SELECT... INTO OUTFILE语句的查询结果直接导出到一个文件在服务器主机上。导出数据的SELECT...INTO OUTFILE声明:
这句话的语法结合了常规的SELECT INTO OUTFILE文件名的末尾。默认的输出格式是相同的LOAD DATA,所以下面的语句导出tutorials_tbl的表制表符分隔的,换行结尾的文件到/tmp/tutorials.txt:
mysql> SELECT * FROM tutorials_tbl-> INTO OUTFILE '/tmp/tutorials.txt';
也可以更改输出格式,使用选项来指示如何引用和分隔列和记录。 CRLF终止线要导出tutorial_tbl的CSV格式的表格,使用这样的语句:
mysql> SELECT * FROM passwd INTO OUTFILE '/tmp/tutorials.txt'-> FIELDS TERMINATED BY ',' ENCLOSED BY '"'-> LINES TERMINATED BY '\r\n';
SELECT ... INTO OUTFILE具有以下属性:
由MySQL服务器直接创建输出文件,这样的文件名应指定您希望在服务器主机上的文件将被写入。没有本地版本的LOAD DATA LOCAL版本的类似的语句。
必须要有MySQL的FILE权限才能执行的SELECT... INTO语句。
输出文件必须不存在。这可以防止MySQL从会破坏文件可能重要。
应该在服务器主机上或一些方法来检索文件从该主机的登录帐户。否则SELECT... INTO OUTFILE可能是没有价值的。
在Unix下,创造了世界可读的文件和所拥有的MySQL服务器。这意味着虽然就可以读取该文件,但是不能够删除它。
作为原始数据的导出表:
使用mysqldump程序复制或备份表和数据库。它可以写表输出的原始数据文件或为一组的INSERT语句重新创建该表中的记录。转储一个表,必须指定一个数据文件 - 选项卡上的选项,表示想要的MySQL服务器写入文件所在的目录。
使用mysqldump程序复制或备份表和数据库。它可以写表输出的原始数据文件,或为一组的INSERT语句重新创建该表中的记录。转储一个表,必须指定一个数据文件 - 选项卡上的选项,表示想要的MySQL服务器写入文件所在的目录。
$ mysqldump -u root -p --no-create-info \ --tab=/tmp TUTORIALS tutorials_tblpassword ******在SQL格式导出表的内容或定义:
一个表中的SQL格式导出到一个文件,使用这样的命令:
$ mysqldump -u root -p TUTORIALS tutorials_tbl > dump.txtpassword ******这将创建文件的内容如下:
-- MySQL dump 8.23---- Host: localhost Database: TUTORIALS----------------------------------------------------------- Server version 3.23.58---- Table structure for table `tutorials_tbl`--CREATE TABLE tutorials_tbl (tutorial_id int(11) NOT NULL auto_increment,tutorial_title varchar(100) NOT NULL default '',tutorial_author varchar(40) NOT NULL default '',submission_date date default NULL,PRIMARY KEY (tutorial_id),UNIQUE KEY AUTHOR_INDEX (tutorial_author)) TYPE=InnoDB;---- Dumping data for table `tutorials_tbl`--INSERT INTO tutorials_tbl VALUES (1,'Learn PHP','John Poul','2007-05-24');INSERT INTO tutorials_tbl VALUES (2,'Learn MySQL','Abdul S','2007-05-24');INSERT INTO tutorials_tbl VALUES (3,'JAVA Tutorial','Sanjay','2007-05-06');要转储多个表,他们的名字所有的数据库名称参数。要转储整个数据库,不指定任何表后的数据库,如下所示:
$ mysqldump -u root -p TUTORIALS > database_dump.txtpassword ******所有可用的数据库备份主机上使用以下命令:
$ mysqldump -u root -p --all-databases > database_dump.txtpassword ******在SQL格式导出表的内容或定义:
这些方法可用于实现数据库的备份策略。表或数据库复制到另一台主机:
如果要复制的表或数据库从一个MySQL服务器,然后使用mysqldump数据库名和表名。
在源主机上运行以下命令。这将转储完整的数据库到dump.txt文件:
$ mysqldump -u root -p database_name table_name > dump.txtpassword *****复制完整的数据库,而不使用一个特定的表名称,如上面所解释。
现在,FTP dump.txt文件在另一台主机上,使用下面的命令。在运行此命令之前,请确保已创建目标服务器上的数据库名称。
$ mysql -u root -p database_name < dump.txtpassword *****另一种方法,而无需使用一个中间文件来完成,mysqldump输出直接通过网络发送到远程的MySQL服务器。如果可以连接到两台服务器的cookbook 数据库所在的主机上,使用以下命令:
$ mysqldump -u root -p database_name \ states | mysql -h other-host.com database_name命令mysqldump的一半连接到本地服务器,并写入转储输出管道。 MySQL的一半的命令连接到远程MySQL服务器otherhost.com。它读取输入管和其他host.com服务器发送的每个语句。
mysql存储过程教程是什么
更多相关免费学习推荐:mysql教程(视频)mysql存储过程教程:1、创建表 1)打开mysql的图形化管理工具【MySQL Workbench 6.3 CE】,登录mysql数据库 2)在【test】测试数据库(自己创建的空数据库,实际场景使用具体数据库即可)的【Tables】菜单上,点击右键选择【Create Table】 3)在新建表界面,输入表名称、备注、添加列,点击【Apply】按钮完成创建表2、插入测试数据 1)选中test数据库,此步可选(因为mysql的sql语句都是要带数据库名称前缀的) 2)点击菜单顶部的第一个图标菜单【Create a new tab ...】 3)在sql语句窗口,输入插入语句与查询语句 4)点击sql窗口上面的 闪电 图标,执行sql语句3、创建存储过程 1)在test数据库的【Stored Procedures】菜单中点击右键【Create Stored Procedures】 2)在创建存储过程界面,输入如图所示的代码(虽然有一个输入参数str,但是没有使用,在存储过程中可以直接使用这个变量) 3)点击【Apply】创建存储过程,在弹窗中都点击【Apply】即可4、执行存储过程 1)在SQL窗口中调用存储过格式【call new_procedure('haha');】 A)call是调用存储过程的必须命令 B)new_procedure是要调用的存储过程名字 C)('haha')是传入存储过程的参数 2)如果执行存储过程报错“safe update mode”,则修改数据更新模式,然后执行存储过程SET SQL_SAFE_UPDATES = 0;5、修改存储过程 1)在要修改的存储过程名字上点击右键,选择【Alter Stored Procedure...】 2)在修改存储过程界面,直接修改后,Apply即可6、删除存储过程在要删除的存储过程名字上点击右键,选择【Drop Stored Procedure...】即可
怎么查看mysql中已创建的存储过程
在master中的表中有sysobjects,自己写了一些存储过程就在在里面.你也可以在通过 sp_helptext procedure_name.
mysql 存储过程
MySQL教程4 MySQL8运算符、函数、存储过程及新增数据类型 17.之创建带有IN和OUT参数的存储过程 学习猿地
. 关于MySQL的存储过程
存储过程是数据库存储的一个重要的功能,但是MySQL在5.0以前并不支持存储过程,这使得MySQL在应用上大打折扣。好在MySQL 5.0终于开始已经支持存储过程,这样即可以大大提高数据库的处理速度,同时也可以提高数据库编程的灵活性。
MySQL存储过程的创建
(1). 格式
MySQL存储过程创建的格式:CREATE PROCEDURE 过程名 ([过程参数[,...]])[特性 ...] 过程体
这里先举个例子:
mysql> DELIMITER //
mysql> CREATE PROCEDURE proc1(OUT s int)
-> BEGIN
-> SELECT COUNT(*) INTO s FROM user;
-> END
-> //
mysql> DELIMITER ;
注:(1)这里需要注意的是DELIMITER //和DELIMITER ;两句,DELIMITER是分割符的意思,因为MySQL默认以";"为分隔符,如果我们没有声明分割符,那么编译器会把存储过程当成SQL语句进行处理,则存储过程的编译过程会报错,所以要事先用DELIMITER关键字申明当前段分隔符,这样MySQL才会将";"当做存储过程中的代码,不会执行这些代码,用完了之后要把分隔符还原。
(2)存储过程根据需要可能会有输入、输出、输入输出参数,这里有一个输出参数s,类型是int型,如果有多个参数用","分割开。
(3)过程体的开始与结束使用BEGIN与END进行标识。