当前位置:首页 > 芯闻号 > 充电吧
[导读]当想Mysql出发其中插入或者更新一条数据的时候,我希望使用触发器进行一些检查工作。虽然这些工作可以使用PHP来完成,但考虑到公司做PHP的小伙子是个新手,为了简化PHP端的业务,使用触发器来实现可靠

当想Mysql出发其中插入或者更新一条数据的时候,我希望使用触发器进行一些检查工作。虽然这些工作可以使用PHP来完成,但考虑到公司做PHP的小伙子是个新手,为了简化PHP端的业务,使用触发器来实现可靠性应该更强, 在平时的应用中我们经常使用触发器来做一些关联表的字段值的更新操作。这次,我想做的事,在插入数据之前进行一次检查。


当前的应用场景是,当创建订单的时候,先检查用户账户的余额,余额不足则终止订单创建操作。通过查阅资料,从Mysql 5.5 开始为我们提供了SIGNAL函数来实现这个功能。

								CREATE TRIGGER `tg_order_create` AFTER INSERT ON `tp_order` FOR EACH ROW BEGIN 	DECLARE msg varchar(200); 	 	IF 2=NEW.condition THEN 		UPDATE `tp_user` SET `frozen_amount`=`frozen_amount`+NEW.amount WHERE `id`=NEW.uid AND `amount`-`frozen_amount` > NEW.amount; 		 		IF ROW_COUNT() <> 1 THEN 			set msg = "用户余额不足以完成支付."; 			SIGNAL SQLSTATE 'HY000' SET MESSAGE_TEXT = msg; 		END IF; 	 	ELSEIF 3=NEW.condition THEN 		UPDATE `tp_user` SET `amount`=`amount`-NEW.amount WHERE `id`=NEW.uid AND `amount`-`frozen_amount` > NEW.amount; 		 		IF ROW_COUNT() <> 1 THEN 			set msg = "用户余额不足以完成支付."; 			SIGNAL SQLSTATE 'HY000' SET MESSAGE_TEXT = msg; 		END IF; 	END IF; END;
							


这里这条触发器的功能是库存操作,当库存足够的时候 减少库存,否则 抛出一个异常并报告商品库存不足:

								CREATE TRIGGER `TG_order_detail_dec_stock` BEFORE INSERT ON `tp_order_detail` FOR EACH ROW BEGIN 	DECLARE msg VARCHAR(200); 	UPDATE `tp_stock` SET `num`=`num`-NEW.num WHERE `goods_id`=NEW.goods_id AND `mid`=NEW.mid AND `num`>=NEW.num; 	IF ROW_COUNT() <> 1 THEN 		SELECT CONCAT(`name`, ' 库存不足.') INTO msg  FROM `tp_goods` WHERE `id`=NEW.goods_id; 		SIGNAL SQLSTATE 'HY000' SET MESSAGE_TEXT = msg; 	END IF; END;
							



在PHP端的处理(注:使用ThinkPHP框架):

								//前面省略若干行.... try {  	if (false === ($order_pk = $tbl_order->add($order))) { 		$tbl->rollback(); 		echo json_encode(array('success' => -1, 'message' => "创建订单失败!."), JSON_UNESCAPED_UNICODE); 		return; 	} }catch (PDOException $e){ 	$errInfo=$e->errorInfo[2]; 	$tbl->rollback(); 	echo json_encode(array('success' => -1, 'message' => "创建订单失败!,{$errInfo}"), JSON_UNESCAPED_UNICODE); 	return; } //后面省略若干行....
							



参考资料:

Mysql5.5  SINGAL 语法(英文)

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

Feb. 19, 2024 ---- 受限于全球经济发展趋缓,科技产业成长动能转趋保守,英特尔、德州仪器等业者近期财报相继释出第一季营收衰退警讯,反映出目前供应商接单与出货平淡。TrendForce集邦咨询预估今年第一季...

关键字: MLCC AI芯片 AI服务器

业内消息,近日外网数码博主在视频中分享了关于英伟达 RTX 5000 系列显卡的相关信息,该博主表示,英伟达 Blackwell 的时钟频率可能比 Lovelace 更快,加速时钟频率可以超过 3 GHz,但目前尚未清楚...

关键字: 英伟达 RTX 5090 显卡

业内消息,昨天小鹏汽车董事长何小鹏发布年后开工首封内部信,透露了大量信息。其中,何小鹏分享了对于2024年的十个思考,并公布了小鹏汽车2024年业绩目标、产品规划等信息。此外,小鹏汽车将招聘约4000人,并投入同比超过...

关键字: 小鹏汽车 何小鹏

业内消息,近日美国专利商标局(USPTO)拒绝了 OpenAI 的 GPT 商标申请,认为 GPT 属于描述性术语,不能注册为商标。USPTO 认为 GPT 是一个过于笼统的术语,可能会阻止竞争对手将其产品描述为 GPT...

关键字: 专利 商标 OpenAI GPT

业内消息,谷歌内部研发了一款名为「Goose」的 AI 大语言模型,用于提高员工编写代码效率,加速产品研发,据悉,Goose 能回答技术问题,编写代码,提供自然语言的代码编辑提示,是谷歌将 AI 融入产品开发的重要一环。

关键字: 谷歌 AI 大语言模型 Goose

开工第一天,小米就搞了个大动作!

关键字: 手机 智能制造

微软近日宣布,未来两年将在德国投资32亿美元,扩大其AI和云基础设施,创下该公司在德国的最大投资记录。

关键字: 微软 云计算 AI 大模型

最新消息,小米14 Ultra新机将于 2 月 22 日发布( 2 月 25 日海外发布),多名数码博主表示已有部分小米门店开启盲订。据了解,小米14 Ultra将搭载高通骁龙 8 Gen 3 处理器,并提供LPDDR5...

关键字: 小米14 Ultra 手机

业内消息,近日周鸿祎谈及OpenAI发布的文字转视频模型Sora时祎表示,AI不一定那么快颠覆所有行业,但它能激发更多人的创作力。他认为今天Sora可能给广告业、电影预告片、短视频行业带来巨大的颠覆,但它不一定那么快击败...

关键字: 周鸿祎 视频模型 Sora AI

近日从国家知识产权局获悉。华为最新专利《可变光圈、摄像模组以及电子设备》获批,该专利于 2022 年 9 月提交申请,并于今年 2 月 13 日授权公告。从设计草图来看,可变光圈结构上有明显调整,有望提高稳定性和拍摄效果...

关键字: 华为 专利 可变光圈 摄像模组 电子设备
关闭
关闭