trigger_procedure)function

--创建触发器

--需求: 有两张表, 一张订单表,一张商品表, 每生成一个订单,意味着商品的库存要减少.

--触发器:订单生成一个,商品减少一个

--创建数据表googs和order
create table my_goods(
id int primary key auto_increment,
name varchar(20) not null,
price decimal(10,2) default 1,
inv int comment '库存数量')charset utf8;

--插入数据
insert into my_goods values(1,'苹果','6500.3432',100),(null,'诺基亚','4320',230);


--创建my_order数据表
create table my_order(
id int primary key auto_increment,
g_id int not null comment '商品ID',
g_number int comment '商品数量'
)charset utf8;

--创建触发器



delimiter $$
create trigger before_order before insert on my_order for each row
begin
    select inv from my_goods where id=new.g_id into @inv;
    if @inc<new.g_number then 
    insert into XXX values(XXX);
    end if;
end
$$
delimiter ;



--创建触发器:订单表中新增订单则在库存表中减去相应的数量

--验证订单数量与库存数量的大小
delimiter %%
create trigger before_order before insert on my_order for each row
begin
    select inv from my_goods where id=new.g_id into @inv;
    if @inv<new.g_number then
    insert into xxx values(xxx);
    end if;
end
%%
delimiter ;
--触发器:库存的数量减去订单增加的数量
delimiter $$
create trigger after_order after insert on my_order for each row
begin
    update my_goods set inv=inv-new.g_number where id=new.g_id;
end
$$
delimiter ;

--插入订单
insert into my_order values(null,1,3);

--查看所有触发器
show triggers\G


--查看触发器创建语句
show create trigger goods_order\G

--创建函数


--创建存储过程
--设置全局变量
set @int_1=1;
set @int_2=2;
set @int_3=3;

--创建存储过程
delimiter $$
create procedure pro1(in int_1 int,out int_2 int,inout int_3 int)
begin
    select int_1,int_2,int_3;
    set int_1=10;
    set int_2=100;
    set int_3=1000;
    select int_1,int_2,int_3;

    select @int_1,@int_2,@int_3;
    set @int_1='a';
    set @int_2='b';
    set @int_3='c';
    select @int_1,@int_2,@int_3;
end
$$
delimiter ;



--调用存储过程:对比输出结果
call pro1(@int_1,@int_2,@int_3);
--查看全局变量
select @int_1,@int_2,@int_3;--值为:a   100   1000  

--创建函数:求1到指定数的连加和
delimiter $$
create function sum1(int_1 int) returns int
begin
    set @i=1;
    set @res=0;
    while @i <= int_1 do
    set @res= @res + @i;
    set @i=@i+1;
    end while;
    return @res;
end
$$
delimiter ;

--调用函数
select sum1(10);

--创建函数:求1到指定数值之间的连续和,并且能整出5的不相加
delimiter $$
create function sum2(int_1 int) returns int
begin
    declare i int default 1;
    declare res int default 0;
mywhile:while i<=int_1 do 
        if i%5=0 then
            set i=i+1;
            iterate mywhile;
        end if;
        set res=res+i;
        set i=i+1;
    end while;
    return res;
end
$$
delimiter ;

--调用函数:sum2
select sum2(10);--输出值为40
select sum2(100);--之为4000

--系统函数
--字符串函数
--定义两个变量
set @cn='世界你好';
set @en='hello world';

--由于任何函数都有返回值,因此函数调用都用select来调用
--在gbk中一个字母为一个字符用一个字节存储,汉子一个字符用两个字节存储
select substring(@en,1,1),substring(@cn,1,1);--h   世   

select char_length(@en),char_length(@cn);--查询字符: 11    4     

select length(@en),length(@cn);--查询字节:11  8

select instr(@en,'l'),instr(@cn,'拜拜');--查询在字符串中是否含有子字符串,
--返回值:若有则返回个数,若没有则返回0
--替换:找到位置,制定字段,用制定的字符替换

select insert(@en,3,3,'y'),@en;--返回值:hey world,   hello world

select lpad(@en,20,'welcome'),@en;--返回值:welcomewehello world,hello world
select lpad(@cn,20,'欢迎'),@cn;--返回值:欢迎欢迎欢迎欢迎欢迎欢迎欢迎欢迎世界你好,世界你好

set @a='a';
set @b='b';
set @c='A';
select strcmp(@a,@b),strcmp(@a,@c),strcmp(@b,@c);--返回值:-1,0,1  在mysql中不区分大小写


转载于:https://my.oschina.net/u/2483876/blog/519287

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值