mysql程序过程语言procedure、触发器trigger

sql 复制代码
CREATE TABLE `accounts` (
  `a_no` int(11) DEFAULT NULL COMMENT '账户编码',
  `a_name` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '账户名称',
  `a_status` int(11) DEFAULT NULL COMMENT '账户状态',
  `a_bal` float DEFAULT NULL COMMENT '账户余额',
  `open_branch` int(11) DEFAULT NULL COMMENT '开户网点编码',
  `open_branch_name` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '开户行网点名称',
  `phone_no` int(11) DEFAULT NULL COMMENT '账户移动名称'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

insert into accounts values(1,'test1',1,100,11,'1open',111)
insert into accounts values(3,'test1',1,100,11,'1open',33)
insert into accounts values(2,'test2',1,200,22,'1open',222)
sql 复制代码
CREATE TABLE `branch_sum` (
  `b_no` int(11) DEFAULT NULL COMMENT '网点编码',
  `b_date` date DEFAULT NULL COMMENT '汇总日期',
  `b_name` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '网点名称',
  `all_bal` float DEFAULT NULL COMMENT '网点开户行账户余额'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
sql 复制代码
CREATE TABLE `trade_details` (
  `t_date` date DEFAULT NULL COMMENT '交易日期',
  `optr_no` int(11) DEFAULT NULL COMMENT '操作员编码',
  `serial_no` int(11) DEFAULT NULL COMMENT '流水号',
  `t_branch` int(11) DEFAULT NULL COMMENT '交易网点编码',
  `a_no` int(11) DEFAULT NULL COMMENT '账户编码',
  `t_type` int(11) DEFAULT NULL COMMENT '交易类型(1、存款 2、取款)',
  `t_amt` float DEFAULT NULL COMMENT '交易金额',
  `t_result` int(11) DEFAULT NULL COMMENT '交易结果(1、成功 2.失败 3.异常 4.已取消)'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

insert into trade_details values('2026-02-09',1,123,11,2,1,200,1)
insert into trade_details values('2026-02-09',1,123,11,3,2,200,1)

insert into trade_details values('2026-02-09',1,123,11,1,1,500,1)
insert into trade_details values('2026-02-09',1,123,11,1,2,500,1)

CREATE DEFINER=`root`@`localhost` TRIGGER `BalanceNotice` 
AFTER INSERT ON `trade_details` FOR EACH ROW #when NEW.t_result=1
	Begin
declare v_phone varchar(30);
declare	v_type varchar(30);
declare	v_bal int;
declare	v_msg varchar(300);
	

 select phone_no,a_bal into v_phone,v_bal from accounts where a_no=new.a_no;
 
 if new.t_type=1 then
   set  v_type ='存款';
	 set  v_bal=new.t_amt+v_bal;
	 UPDATE accounts set a_bal=v_bal where a_no=new.a_no;
 end if;
 if new.t_type=2 then
    set v_type ='取款';
		set v_bal=v_bal-new.t_amt;
		UPDATE accounts set a_bal=v_bal where a_no=new.a_no;
 end if;
 
    set v_msg =concat(new.t_date,'你的账户',new.a_no,'上执行了',v_type,'交易,存款金额:',new.t_amt,',账号余额为: ',v_bal);
		insert into log values(v_msg);
end;
sql 复制代码
CREATE TABLE `log` (
  `msg` varchar(300) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
sql 复制代码
drop trigger BalanceNotice;
create trigger BalanceNotice
	after insert on trade_details for each row 
	#when NEW.t_result=1
	Begin
declare v_phone varchar(30);
declare	v_type varchar(30);
declare	v_bal int;
declare	v_msg varchar(300);
	
 select phone_no,a_bal into v_phone,v_bal from accounts where a_no=new.a_no;
 
 if new.t_type=1 then
   set  v_type ='存款';
	 set  v_bal=new.t_amt+v_bal;
	 UPDATE accounts set a_bal=v_bal where a_no=new.a_no;
 end if;
 if new.t_type=2 then
    set v_type ='取款';
		set v_bal=v_bal-new.t_amt;
		UPDATE accounts set a_bal=v_bal where a_no=new.a_no;
 end if;
 
    set v_msg =concat(new.t_date,'你的账户',new.a_no,'上执行了',v_type,'交易,存款金额:',new.t_amt,',账号余额为: ',v_bal);
		insert into log values(v_msg);
end
	
sql 复制代码
drop procedure branceBalancesum
create  procedure branceBalancesum(in s_date VARCHAR(20))
Begin
    declare  all_balance int;
    declare	 v_bran_no varchar(10);
    declare	 v_bran_name varchar(30);
    declare	 v_finished int;
    declare c_sum_bal CURSOR FOR   select open_branch,open_branch_name,sum(a_bal) from accounts GROUP BY open_branch,open_branch_name;
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_finished = 1;
 
	 open c_sum_bal;
	 process_loop: loop
		    fetch c_sum_bal into  v_bran_no,v_bran_name,all_balance ;
		
		     if v_finished=1 then 
		         LEAVE process_loop;
		     end if ;
		    insert into branch_sum values(v_bran_no,s_date,v_bran_name,all_balance);
		end loop;
		CLOSE c_sum_bal;
		commit;
	END;
	
	call branceBalancesum('2025-02-07')
	
相关推荐
电魂泡哥3 小时前
SQL出现filesort 一定慢吗
数据库·sql
muddjsv5 小时前
大中小型企业数据层配置规模分析与选型指南
数据库
Runawayliquor5 小时前
opbase:CANN 所有算子的公共地基
大数据·数据库·人工智能·算法
yangshicong5 小时前
第11章:结构化输出与数据提取 —— 让 AI 直接返回你想要的数据格式
数据库·人工智能·redis·python·langchain·ai编程
chimchim666 小时前
pg dblink使用查询
数据库
Java面试题总结6 小时前
java高频面试题(2026最新)
java·开发语言·jvm·数据库·spring·缓存
绝知此事7 小时前
【算法突围 02】树形结构与数据库索引:树形结构与数据库索引:从 BST 到 B+ 树的演化与 MySQL 优化
数据库·mysql·算法·面试·b+树
吴可可1238 小时前
用Teigha修改并保存CAD文件
数据库·算法·c#
yuzhiboyouye9 小时前
内连接,左连接,右连接怎么区别开来?
数据库
铭毅天下9 小时前
Easysearch 版本进化全图——从 ES 国产替代到 AI Native 搜索数据库
大数据·数据库·人工智能·elasticsearch·搜索引擎