在开始创建存储过程之前,先介绍一个很实用的命令,即DELIMITER命令。在MySQL中,服务器处理语句的时候是以分号为结束标志的。但是在创建存储过程的时候,存储过程体中可能包含多个SQL语句,每个SQL语句都是以分号为结尾的,这时服务器处理程序的时候遇到第一个分号就会认为程序结束,这肯定是不行的。所以这里使用DELIMITER命令将MySQL语句的结束标志修改为其他符号。
DELIMITER语法格式为:
DELIMITER $$
说明:$$是用户定义的结束符,通常这个符号可以是一些特殊的符号,如两个“#”,两个“¥”等。当使用DELIMITER命令时,应该避免使用反斜杠(“\”)字符,因为那是MySQL的转义字符

--命令窗口里创建存储过程

 delimiter &&
 create procedure yunjuan()
 begin
 end &&

 show tables &&

 --存储过程一一个表里可以有多个存储过程,但名字不能相同,数据库里是没有重载的,(存储过程没有返回值,存储函数有返回值)
create PROCEDURE mypro1(sellday date,pruductid varchar(20),sellerid varchar(20),amount int(11),money decimal(10,2))
begin
insert into stu_ values(select *from stu where stuid=1);--必须保证查询出的语句是一条语句,不然报错
insert into prosell values(sellday,pruductid,sellerid,amount,money);
end

call mypro1('2012-1-12','2013003','2012002',100,10.5);--调用存储过程


--存储过程二
create PROCEDURE mypro2()
begin
   create table stu_ as select * from stu;
  
end
call mypro2();


--存储过程三
create PROCEDURE mypro3(id int)
begin
   declare vv int default 0;--设置默认值1


  declare vvvv int ;
  set vvvv=0;--设置默认值2
   DECLARE v1 int; 
   declare v2 varchar(20);
   SELECT  stuid,stuname into v1,v2 from stu where stuid=id;
   insert into stu_1 values(v1,v2);  
end


call mypro3(3);
create table if not exists stu_1(
     stuid int,
     stuname varchar(20)  
   );  

 

--存储过程四
create PROCEDURE mypro4(id int)
begin
  
   DECLARE v1 int; 
   declare v2 varchar(20);   
   create table if not exists stu_4(
     stuid int,
     stuname varchar(20)  
   );  

   SELECT  stuid,stuname into v1,v2 from stu where stuid=id;
   insert into stu_4 values(v1,v2);  
end


call mypro4(4);


--存储过程五(建存储过程时先定义变量)
create PROCEDURE mypro_1(a int)
begin
DECLARE V  varchar(20);
if a>=90 then
   set v='优秀';  
elseif a>70 then
   set v='良好';  
elseif a>60 then
   set v='良';  
else
   set v='差';
end if;

insert into stu(stuname)values (v);
end;

call mypro_1(70);


--存储函数
create function myfun()
returns varchar(20)
begin
  return '我很好';
end;

select myfun();

--用存储过程调用存储函数
create PROCEDURE profun()
begin
 DECLARE vv varchar(20);
 set vv=myfun();
end;

--创建视图   (视图里没有真实的数据,是一个虚拟的表)
create view myview as select *from stu;
desc myview;
select * from myview;

--创建触发器(同一个表中可以建多个触发器 after/before)
create TRIGGER mytrigger
after insert on stu
for each row
begin
insert into stu_ values(5,'我被触发器触发了');
end;

insert into stu values(1,'我有触发器');

--索引的目的只是为了提高查询的效率