存储过程,函数,触发器实现商品信息维护

create database exam;

use exam;

-准备三张表 spxxb(商品信息表)kcb(库存表) hzpyb(汉字拼音表)
hzpyb需要导入(有sql文件)

CREATE TABLE spxxb (
spid int(11) NOT NULL AUTO_INCREMENT,
spmc varchar(50) DEFAULT NULL,
sptm varchar(20) DEFAULT NULL,
jldw varchar(10) DEFAULT NULL,
spzt int(11) DEFAULT ‘0’,
lsj decimal(9,2) DEFAULT NULL,
mcsx varchar(10) DEFAULT NULL,
PRIMARY KEY (spid)
);

CREATE TABLE spkcb (
kcid int(11) NOT NULL AUTO_INCREMENT,
spid int(11) DEFAULT NULL,
kcsl int(11) DEFAULT ‘0’,
PRIMARY KEY (kcid)
);

商品信息维护
需要实现的功能
spxxb(商品信息表)的新增,修改,删除。
并且在实现三种功能时需要自动维护(如下)
在insert(新增) (1)在spxxb中新增一条记录时,spkcb(商品库存表)需要对应新增一条记录(触发器)(2)需要实现spxxb名称缩写那一列,不需要我们输入,根据名称自动生成(触发器)
update 当spxxb中一行的商品名称更改时,名称缩写自动根据新名称更改(触发器)
delete 当spxxb中删除一条记录时,spkcb中对应的记录自动删除(触发器)

首先需要完成对名称缩写函数的编写(实现输入汉字,输出拼音简写)

delimiter $$
create function `PysxCx`(zw varchar(50)) returns varchar(10) charset utf8mb4 
begin
    set @pysx='';
    set @jp='';
    set @l=char_length(zw);
    set @i=1;
    while(@i<=@l) do
        select jp into @jp from hzpyb where hz=substring(zw,@i,1);
        set @pysx=concat(@pysx,@jp);
        set @i=@i+1;
    end while;
    return @pysx;
end;$$
delimiter ;

测试
select pysxcx(‘张三’);

结果为zs

接着写总体存储过程

各名称缩写含义
whfs 维护方式 spid 商品id spmc 商品名称 sptm 商品条码 jldw 计量单位 spzt 商品状态 lsj 零售价
维护方式为0 新增,为1修改,其他则删除该记录
desc spxxb;

delimiter $$
create procedure `SpxxWh`(whfs int,spid int,spmc varchar(50),sptm varchar(20),jldw varchar(10),spzt int,lsj decimal(9,2))
begin
    if whfs=0 then
        insert into spxxb(spmc,sptm,jldw,spzt,lsj) values(spmc,sptm,jldw,spzt,lsj);
    elseif whfs=1 then
        update spxxb set `spxxb`.`spmc`=spmc,`spxxb`.`sptm`=sptm,`spxxb`.`jldw`=jldw,`spxxb`.`spzt`=spzt,`spxxb`.`lsj`=lsj where `spxxb`.`spid`=spid;
    else
        delete from spxxb where `spxxb`.`spid`=spid;
    end if;
end$$
delimiter;

写一个触发器,当商品信息表插入记录时触发,自动维护(自动根据名称生成名称缩写)名称缩写

delimiter $$
create trigger `Update_spxxb_mcsx_before_insert_spxxb` before insert on `spxxb` for each row
begin
    set new.mcsx=pysxcx(new.spmc);
end$$
delimiter ;

写一个触发器当,商品信息表中商品名称更改时,自动维护名称缩写

delimiter $$
create trigger `Update_spxxb_mcsc_before_update_spxxb` before update on `spxxb` for each row
begin
    if new.spmc<>old.spmc then
        set new.mcsx=pysxcx(new.spmc);
    end if;
end$$
delimiter;

测试
call SpxxWh(1,1,‘哇哈哈牛奶’,‘100’,‘瓶’,1,3.88);

hptm货品条码

写一个触发器当商品明细表删除记录时,商品库存表删除相应记录

delimiter$$
create trigger `Update_spkcb_before_delete_spxxb` before delete on `spxxb` for each row
begin
    delete from spkcb where spid=old.spid;
end$$
delimiter;

写一个触发器当商品信息表新增时,商品库存表增加相应记录

delimiter $$
create trigger `Update_spkcb_after_insert_spxxb` after insert on `spxxb` for each row
begin
    insert into spkcb(spid,kcsl) values(new.spid,0);
end$$
delimiter ;

测试
call SpxxWh(0,6,‘卤蛋’,‘106’,‘个’,1,1.5);

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

一只呆小白

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

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

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

打赏作者

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

抵扣说明:

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

余额充值