抛异常的代码是:
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;
}