MYSQL存储过程与触发器

MYSQL存储过程

--创建存储过程
create  procedure procedurename(
        OUT pl decimal(8,2),
        OUT ph DECIMAL(8,2),
        OUT pa DECIMAL(8,2)
)
BEGIN
   SELECT Min(pro_price)
   into pl
   from products;
   select Max(pro_price)
   into ph 
   from products;
   select Avg(pro_price)
   into pa
   from products;
end;

调用与显示值

--调用存储过程
call procedurename(@pricelow,@pricehigh,@priceaverage)
--显示数据
select @priceaverage
select @pricehigh,2pricelow,@priceaverage;

有输入与输出的存储过程

--有输入与输出的存储过程
create procedure ordertotal(
       IN onumber INT,
       OUT ototal DECIMAL(8,2)  
)
BEGIN
   SELECT Sum(item_price*quantity)
   from orderitems
   where order_num = onumber
   into ototal 
end;
--调用存储过程
call ordertotal(2001,@total);
--显示数据
select @total

触发器

--触发器
/*唯一的触发器名
触发器关联的表
触发器响应的活动(DELETE 、INSERT 、UPDATE)
触发器何氏执行(处理之前或之后)
*/
create or replace trigger tri_tablename_operation 
after operation on table_name
for each row
  ....
--删除触发器
drop trigger truggername
--INSERT 触发器
/*1.在INSERT触发器代码内,可引用一个名为NEW的虚拟表,访问被插入的行
2.在BEFORE INSERT触发器中,new中的值也可以被更新(允许更改被插入的值)
3.对于auto_increment列,NEW在insert执行之前包含0,在INSERT执行之后包含新的自动生成值
*/
--eg:
create or replace trigger tri_table_name_operation
after insert on table_name
for each row select NEW.ORDER_NUM
  
create table A
( id int,
  name varchar(12)
)
select * from AA
create or replace trigger TRI_A_INSERT
after insert on A
for each row 
  
 --DELETE触发器
 1.delete触发器代码内,可以引用一个名为OLD的虚拟表
 访问被删除的行
 2.OLD的值全都是只读的,不能更新
 --eg:
 create or replace trigger tri_tablename_del 
 before delete on orders
 for each row
   begin
       insert into tablename (cloumn1,column2...)
       values(column1,column2...)
    end;
--创建一张表和AA结构一样
create table BB as select * from AA where 1=2
--创建触发器
create or replace trigger TRI_AA_DEL
  after delete on AA
  for each row
begin
  insert into BB (nub, name, age) values (:old.nub,:old.name,:old.age);
end;
--测试
select * from AA
delete from AA where age = 12;
commit;
select * from BB
--UPDATE触发器
/*1.在update触发器代码内,可以引用一个名为OLD虚拟表访问以前的值,
引用一个名为NEW的虚拟表访问更新的新的值
2.在before update触发器中,NEW中的值可能也被更新(允许更改将要用于UPDATE语句中的值)
3.OLD中的值全都是只读的,不能更新*/
--eg:
create or replace trigger TRI_TABELNAME_UPDATE
before update on tablename
for each row
  begin
  set :new.columns = upper(:new.columns);
  end;
  --插入代码片
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小刘同学要加油呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值