Mysql学习笔记

Mysql学习笔记。Procedure & Function

Procedure 语法:

CREATE
    [DEFINER = { user | CURRENT_USER }]
    PROCEDURE sp_name ([proc_parameter[,...]])
    [characteristic ...] routine_body


proc_parameter:
    [ IN | OUT | INOUT ] param_name type

type:
    Any valid MySQL data type

characteristic:
    COMMENT 'string'
  | LANGUAGE SQL
  | [NOT] DETERMINISTIC
  | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
  | SQL SECURITY { DEFINER | INVOKER }

begin
    Valid SQL routine statement
end;

 

Function 语法:

CREATE
    [DEFINER = { user | CURRENT_USER }]
    FUNCTION sp_name ([func_parameter[,...]])
    RETURNS type
    [characteristic ...] routine_body

func_parameter:
    param_name type

type:
    Any valid MySQL data type

characteristic:
    COMMENT 'string'
  | LANGUAGE SQL
  | [NOT] DETERMINISTIC
  | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
  | SQL SECURITY { DEFINER | INVOKER }

begin
    Valid SQL routine statement
end;

官方网站关于 procedure, function相关文书档案:

  FAQ:

  语法表达:

 

MySQL:procedure, function, cursor,handler,cursorhandler

Mysql 学习笔记(陆)

Cursor

Cursor官方文书档案:

在遍历时,mysql中的3种循环方式(loop, while,
repeat)都得以应用。官方文书档案中给了 loop 形式的deamo。

在运用cursor时要小心:

壹)declare
cursor在此以前没办法有任何的除此而外declare以外的操作,也等于事先只可以有变量注脚。

二)declar cursor 之后无法有其余变量的宣示,能够注明极度管理 handler。

3)cursor 只能在procedure, function中。

4)fetch into var1, var2。这里的var名不能与 declare cursor时select
中的列名同样。假设同样会fetch 到NULL。比方上面deamon中的 metric ==> m

997755.com澳门葡京 1

其它的deamon:

 

Procedure & Function

Procedure 语法:

CREATE
    [DEFINER = { user | CURRENT_USER }]
    PROCEDURE sp_name ([proc_parameter[,...]])
    [characteristic ...] routine_body


proc_parameter:
    [ IN | OUT | INOUT ] param_name type

type:
    Any valid MySQL data type

characteristic:
    COMMENT 'string'
  | LANGUAGE SQL
  | [NOT] DETERMINISTIC
  | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
  | SQL SECURITY { DEFINER | INVOKER }

begin
    Valid SQL routine statement
end;

 

Function 语法:

CREATE
    [DEFINER = { user | CURRENT_USER }]
    FUNCTION sp_name ([func_parameter[,...]])
    RETURNS type
    [characteristic ...] routine_body

func_parameter:
    param_name type

type:
    Any valid MySQL data type

characteristic:
    COMMENT 'string'
  | LANGUAGE SQL
  | [NOT] DETERMINISTIC
  | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
  | SQL SECURITY { DEFINER | INVOKER }

begin
    Valid SQL routine statement
end;

官方网址关于 procedure, function相关文书档案:

  FAQ:

  语法表达:

 

游标(Cursor)

是系统为用户设置的三个数目缓冲区,存放 SQL
语句的实行结果。各种游标区都有 一个名字。用户能够用 SQL
语句逐一从游标中获得记录,并赋给主变量,交由主语言进1 步管理。

997755.com澳门葡京,游标的表征:

➢ READ ONLY 只读,只好取值而无法赋值;

➢ NOT SCROOLABLE 不可回滚,只好挨个读取;

➢ ASENSITIVE 敏感,不可能在早就开发游标的表上试行 update 事务;

游标操作:

➢ 评释游标: DECLARE cursor_name CURSOR FOR select_statement
那几个讲话声惠氏(WYETH)个光标。也得以在子程序中定义八个光标,可是二个块中的每二个光标必须有唯1的名字。

➢ 展开游标: OPEN cursor_name 游标 FETCH:FETCH cursor_name INTO
var_name [, var_name] …
这几个语句用钦命的张开光标读取下一行(即便有下壹行的话),并且提柔光标指针。

➢ 关闭游标 CLOSE: CLOSE cursor_name
这几个语句关闭先前开垦的光标。假诺未被鲜明地关闭,光标在它被声称的复合语句
的最后被关闭。

Handler

在什么的规格下,做什么的管理。比如当发生相当时,该如何做。

相关文书档案:

在上边的deamon中就有declare continue handler NOT FOUND 、declare
continue handler SQLSTATE 等。

 

Cursor

Cursor官方文书档案:

在遍历时,mysql中的三种循环境情时势(loop, while,
repeat)都得以运用。官方文书档案中给了 loop 情势的deamo。

在接纳cursor时要小心:

1)declare
cursor以前无法有其余的除却declare以外的操作,也便是前边只好有变量注脚。

二)declar cursor 之后无法有其它变量的宣示,能够表明格外处理 handler。

3)cursor 只能在procedure, function中。

4)fetch into var1, var2。这里的var名不能与 declare cursor时select
中的列名一样。假设相同会fetch 到NULL。举个例子下边deamon中的 metric ==> m

997755.com澳门葡京 2

其它的deamon:

 

(壹)游标的行使办法

一)声爱他美(Aptamil)(Karicare)个游标

declare 游标名 cursor for select_statement;

二)展开3个游标

open 游标名;

3)取值

fetch 游标名 into var1,var2[,…];

4)关闭

close 游标名;

Demo

997755.com澳门葡京 3

997755.com澳门葡京 4

 

 

 

Handler

在怎么着的原则下,做什么的处理。举个例子当产生尤其时,该如何是好。

连锁文书档案:

在底下的deamon中就有declare continue handler NOT FOUND 、declare
continue handler SQLSTATE 等。

 

(2)实例

delimiter //

create procedure p3()

begin

declare row_sno varchar(10);

declare row_sname varchar(20);

declare row_sage int;

declare row_ssex varchar(5);

declare ergodic int default 0;

declare getstudent cursor for select sno,sname,sage,ssex from student;

declare continue handler for not found set ergodic=1;

open getstudent;

repeat

fetch getstudent into row_sno,row_sname,row_sage,row_ssex;

select row_sno,row_sname,row_sage,row_ssex;

until ergodic=1 end repeat;

close getstudent;

end //

call p3() // 

997755.com澳门葡京 5

未使用游标–一

997755.com澳门葡京 6

未利用游标–二

997755.com澳门葡京 7

游标–1

997755.com澳门葡京 8

游标–2

997755.com澳门葡京 9

游标–3

997755.com澳门葡京 10

游标–4

从上边包车型客车图中能够看出最终一条数据出现了三遍

exit与continue的区分是:exit触发后,后边的言语不再实施,而continue还须求继续实施。

下边使用exit

create procedure p4()

begin

declare row_sno varchar(10);

declare row_sname varchar(20);

declare row_sage int;

declare row_ssex varchar(5);

declare ergodic int default 0;

declare getstudent cursor for select sno,sname,sage,ssex from student;

declare exit handler for not found set ergodic=1;

open getstudent;

repeat

fetch getstudent into row_sno,row_sname,row_sage,row_ssex;

select row_sno,row_sname,row_sage,row_ssex;

until ergodic=1 end repeat;

close getstudent;

 end  //

997755.com澳门葡京 11

游标–5

997755.com澳门葡京 12

游标–6

997755.com澳门葡京 13

游标–7

997755.com澳门葡京 14

游标–8

由上海教室可以看来,最终一条数据未有出现三回。

注:本文参考http://blog.csdn.net/xushouwei/article/details/52201360

Debugger Tool

997755.com澳门葡京 15

 

 

 

地点 的多少个procedure,在采用debugger调试时,只供给在main中写直接调用
就足以了。

997755.com澳门葡京 16

 

Demo

997755.com澳门葡京 17

997755.com澳门葡京 18

 

 

 

Debugger Tool

997755.com澳门葡京 19

 

 

 

地点 的八个procedure,在运用debugger调节和测试时,只需求在main中写直接调用
就足以了。

997755.com澳门葡京 20

 

, function,
cursor,handler,cursorhandler Procedure Function Procedure 语法: CREATE
[ DEFINER = { user | CURRENT_USER } ] PROCEDURE sp_name ( [
proc_parameter…

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*
*
Website