数据库mysql存储过程

1、Variables

变量的定义

declare total_sale int default 0;

declare total_count int;

set total_count = 10;

 

2、@ Variables

全局变量

set @counter = 1;  定义

 

3、Basic Syntax of Stored Procedures/Functions

存储过程不带返回值,存储函数带返回值,参数in不改变值,out改变值

  • Procedures

      create procedure proc_name ([parameters])

      routine_body

  • Functions

      create function func_name ([parameters])

       returns data_type routine_body

  • Parameter definition:

          [ in | out | inout ] param_name data_type

  • “in” is the default

例子:

create procedure GetStudentSizeByDept(in  deptname varchar(50))

create function GetStudentSizeByDept2(in  deptname varchar(50)) returns int

简单的存储过程

mysql > delimiter //   -- replace default statement delimiter ; by //

mysql >  create procedure GetAllEmployees()     

 begin

           select  * from employees;

      end //

mysql > delimiter ;  -- make ; the statement delimiter again

 

4、IF Statement

if语句基本语法

if ……then……

elseif……then……

else ……

end if;

例子:

if creditlim > 50000 then

   set p_customerLevel = 'PLATINUM';

elseif (creditlim <= 50000 and creditlim >= 10000) then

   set p_customerLevel = 'GOLD';

elseif creditlim < 10000 then

   set p_customerLevel = 'SILVER';

end if;

 

5、Case Statement

Case语句基本语法

CASE  case_expression

    WHEN when_expression_1 THEN    commands

    WHEN when_expression_2 THEN  commands

              ...

    ELSE commands

END CASE;

例子:

CASE customerCountry

    WHEN 'USA' THEN set p_shiping = '2-day Shipping';

    WHEN 'Canada' THEN set p_shiping = '3-day Shipping';

    ELSE  set p_shiping = '5-day Shipping';

END CASE;

 

6、Loop Statements

循环while基本语法

WHILE expression DO

   ……

END WHILE;

例子:

WHILE x <= 5 DO

    …………

    set  x = x + 1;

END WHILE;

 

7、Loop, Leave & Iterate

LEAVE=break;

ITERATE=continue;

例子:

loop_label:  LOOP

IF  x > 10 THEN

     LEAVE  loop_label;

END  IF;

      set  x = x + 1;

IF  (x mod 2) THEN

       ITERATE  loop_label;

ELSE

       set  str = concat(str, x, ',');

END  IF;

END LOOP; 

 

8、查看存储过程语句

show procedure status;

show create procedure build_email_list;

 

9、Trigger

触发器基本语句,创建与删除

create trigger trigger_name 

        { before | after }

        { insert | update | delete }

        on table_name

        for each row

        

drop trigger [if exists] trigger_name

 

10、OLD and NEW keywords

关键字OLD和NEW注意事项

In an INSERT trigger, only NEW.col_name can be used; there is no old row.

In a DELETE trigger, only OLD.col_name can be used; there is no new row.

In an UPDATE trigger, you can use both OLD.col_name and NEW.col_name

 

11、monitoring changes

监听数据改变

after update on products

for each row

begin

if old.price <> new.price then 

…………

 

12、enforce integrity constraints

执行完整的约束(删除)操作

如果删除了某个学生,需要删除该学生的所有注册。

after delete on students

for each row

begin

delete from enrollments where sid = old.sid;

 

13、Events

事件,有些表需要按固定的事件以固定的规则更新

创建事件

create event event_name

           on schedule schedule_spec

           do event_body;

解释:

schedule_spec: at timestamp [+ interval interval_spec] | every interval [starts timestamp [+ interval interval_spec] ] [ends timestamp [+ interval interval_spec] ]

interval_spec: quantity {year | quarter | month | day | hour | minute | week | second | year_month | day_hour | day_minute | day_second | hour_minute | hour_second | minute_second}

例子:

create event my_schedule

     on schedule at current_timestamp + interval 3 hours

     do insert into MySchedule values (‘faculty meeting’, ‘2013-11-14 16:30:00’, ‘G11’);

create event my_schedule

     on schedule every 1 day

     do delete from MySchedule where event_time < current_timestamp;

 

本文参考杜智华老师的ppt

 

你可能感兴趣的:(数据库)