发新帖

[MySQL] MySQL 存储过程的使用

零下一度 2019-12-31 972

1、视图

/*
    视图,
*/
-- 创建视图 
create view v1 as select id,title from news where id>2; 
-- 使用视图
select * from v1;
-- 修改视图
alter view v1 as select id from news;
-- 删除视图
delete view v1;


2、触发器

/*
 * 触发器
 */
-- 插入前
create trigger tri_before_insert_news before insert on news for each row
begin
--    ... 
end

-- 插入后
create trigger tri_after_insert_news after insert on news for each row
begin
--    ...
end

-- 删除前
create trigger tri_before_delete_news before delete on news for each row
begin
--    ...
end

-- 删除后
create trigger tri_after_delete_news after delete on news for each row
begin
--    ...
end

-- 更新前
create trigger tri_before_update_news before update on news for each row
begin
--    ...
end

-- 更新后
create trigger tri_after_update_news after update on news for each row
begin
--    ...
end


-- 插入前触发器
delimiter\\
create trigger tri_before_insert_news before insert on news for each row
begin
  if new.title = "测试" then
     insert into tags(`name`)  values ("before测试");
  end if;
end;\\
delimiter;

-- 插入后触发器
delimiter\\
create trigger tri_after_insert_news after insert on news for each row
begin
    if new.id >0 then
      insert into tags(`name`)  values ("after测试a");
    end if;
end\\
delimiter;

insert into news(`title`)  values ('测试');

-- 删除触发器
drop trigger tri_before_insert_news;
drop trigger tri_after_insert_news;
-- 使用触发器
insert into news(`title`,`content`) values('测试','内容');


3、存储过程  procedure 和 function的使用

-- 创建存储:in,仅用于传入参数用;out,仅用于返回值用;inout,既可以传入又可以当作返回值
create procedure p1(in s varchar(100))
begin 
    select * from news where id>3 and title = s;
end; 
create procedure p2(in s varchar(200))
begin 
    select s from news;
end;

-- 执行存储过程
call p1("测试");
call p2("`id`,`title`");

-- 有参数的存储
delimiter\\
create procedure p3(in n int,inout cd int,out res int)
begin
    declare temp1 int;  -- 定义局部变量
    declare temp2 int default 2;
    
    set temp1 = 2;
    set res = temp1+temp2+n;
    set cd = n;
end\\
delimiter;


4、定义变量

declare @res int;
declare @cd int default 10;
call p3(8,@cd,@res);
select @cd,@res;


5、删除存储过程

drop procedure p1;
drop procedure p2;
drop procedure p3;


6、function使用

-- function使用
delimiter//
create function p4()
returns int
begin
declare ecount int;
-- select * from tags;
set ecount = 1;
return (ecount);
end//
delimiter

drop function p4;
SELECT p4();


-- alter table 表名 change 原列名 新列名  类型; --修改表的列属性名
-- alter table 表名 modify 列名 类型 ;  --修改表的类类型
-- alter table 表名 drop 列名;  --删除表的某一列
-- alter table 表名 add  列名 类型;--添加某一列
-- alter table 表名 rename 新表名; --修改表
-- alter table member modify PartnerCity int(11)    default 0 unique;


最新回复 (0)
返回
零下一度
主题数
930
帖子数
0
注册排名
1