Mysql 6.0无法手动抛异常

本文介绍了一种使用MySQL触发器来处理库存不足时订单生成的逻辑,通过在添加订单前检查库存并根据情况更新库存或取消订单,确保了业务的一致性。此外,还探讨了如何在不同MySQL版本中抛出异常。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

抛异常的代码是:

SIGNAL SQLSTATE 'HY000' SET MESSAGE_TEXT = '手动抛出异常' ;   

可能是Mysql版本问题,5.7可以,6.0不行

解决办法:

删除一个不存在的表,主动制造异常...(这个方法有点坑)

练习的时候没考虑事务

业务是添加一条订单表,但是库存不足,实现的功能是不生成订单,

解决方法是:

触发器:

create trigger stock_manager
BEFORE insert on t_stockout_detal
for each row
BEGIN
DECLARE med_count int default 0;
select med_stock into med_count from t_medicine where med_id = new.sdtl_med_id;
if med_count>=new.sdtl_num then
	update t_medicine set med_stock = med_stock - new.sdtl_num where med_id = new.sdtl_med_id;
else
	delete from t_stockout_detal where sdtl_id = new.sdtl_id;//实际上执行会报错(有点二)
end IF;
end;
<delete id="delete">
    delete from t_stockout_log where slog_id not in (select sdtl_slog_id from t_stockout_detal);
</delete>


service层:

如果添加不成功,再刚才的基础上,再执行一段sql

	@Override
	public boolean addStockoutLog(StockoutLogBean stockoutlog) {
		stkd.add(stockoutlog);
		List<StockoutDetalBean> sdtlList = stockoutlog.getSdtlList();
		for (StockoutDetalBean stockoutDetalBean : sdtlList) {
			stockoutDetalBean.setSdtlSlog(stockoutlog);
		}
		int n = sdd.add(sdtlList);
		if(n<=0) {
			stkd.delete();
		}
		return n>0;
	}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值