MySQL中用存储过程实现银行转账并且在另一张表中添加一条数据
SQL文件:
/*Navicat Premium Data TransferSource Server : hellowordSource Server Type : MySQLSource Server Version : 50549Source Host : localhost:3306Source Schema : db_accountTarget Server Type : MySQLTarget Server Version : 50549File Encoding : 65001
*/SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;-- ----------------------------
-- Table structure for account
-- ----------------------------
DROP TABLE IF EXISTS `account`;
CREATE TABLE `account` (`id` bigint(20) NOT NULL AUTO_INCREMENT,`cardNo` varchar(16) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`password` varchar(6) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`balance` decimal(10, 2) NOT NULL,`status` int(1) NOT NULL,PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;-- ----------------------------
-- Records of account
-- ----------------------------
INSERT INTO `account` VALUES (1, '11111', '1234', 920.00, 1);
INSERT INTO `account` VALUES (2, '22222', '123', 466.66, 0);-- ----------------------------
-- Table structure for transactionrecord
-- ----------------------------
DROP TABLE IF EXISTS `transactionrecord`;
CREATE TABLE `transactionrecord` (`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '记录 id',`cardNo` bigint(20) NOT NULL COMMENT '卡号',`transactionDate` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT ' 交易日期',`transactionAmount` decimal(10, 2) NOT NULL COMMENT '交易额',`balance` decimal(10, 2) NOT NULL COMMENT '账户余额',`transactionType` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT ' 交易类型 取款 还款',`remark` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备注',PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 5 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;-- ----------------------------
-- Records of transactionrecord
-- ----------------------------
INSERT INTO `transactionrecord` VALUES (1, 1, '2021-01-02', 300.00, 824.00, '取款', '。。。');
INSERT INTO `transactionrecord` VALUES (2, 1, '2021-03-06', 104.00, 720.00, '取款', NULL);
INSERT INTO `transactionrecord` VALUES (3, 2, '2021-11-02 15:16:53', 100.00, 466.66, '转账', '转账');
INSERT INTO `transactionrecord` VALUES (4, 1, '2021-11-02 15:16:53', 100.00, 920.00, '转账', '转账');-- ----------------------------
-- Procedure structure for val_transferAccounts
-- ----------------------------
DROP PROCEDURE IF EXISTS `val_transferAccounts`;
delimiter ;;
CREATE PROCEDURE `val_transferAccounts`(in var_a varchar(16),in var_b varchar(16),in var_c decimal(10,2))
begin
start transaction;
update account set account.balance=account.balance-var_c where cardNo=var_a;
update account set account.balance=account.balance+var_c where cardNo=var_b;
#定义查询出var_a账户的名字id
set @var_d=(select id from account where cardNo=var_a);
#定义查询出var_a账户中的余额
set @var_e=(select balance from account where cardNo=var_a);
#定义查询出var_b账户的名字id
set @var_f=(select id from account where cardNo=var_b);
#定义查询出var_b账户中的余额
set @var_g=(select balance from account where cardNo=var_b);#添加var_a账户的转账记录insert into transactionrecord values(null,@var_d,NOW(),var_c,@var_e,'转账','转账');#添加var_b账户的转账记录insert into transactionrecord values(null,@var_f,NOW(),var_c,@var_g,'转账','转账');
COMMIT;
end
;;
delimiter ;SET FOREIGN_KEY_CHECKS = 1;
存储过程:
CREATE PROCEDURE val_transferAccounts(in var_a varchar(16),in var_b varchar(16),in var_c decimal(10,2))
begin
start transaction;
update account set account.balance=account.balance-var_c where cardNo=var_a;
update account set account.balance=account.balance+var_c where cardNo=var_b;
#定义查询出var_a账户的名字id
set @var_d=(select id from account where cardNo=var_a);
#定义查询出var_a账户中的余额
set @var_e=(select balance from account where cardNo=var_a);
#定义查询出var_b账户的名字id
set @var_f=(select id from account where cardNo=var_b);
#定义查询出var_b账户中的余额
set @var_g=(select balance from account where cardNo=var_b);#添加var_a账户的转账记录insert into transactionrecord values(null,@var_d,NOW(),var_c,@var_e,'转账','转账');#添加var_b账户的转账记录insert into transactionrecord values(null,@var_f,NOW(),var_c,@var_g,'转账','转账');
COMMIT;
end;
调用存储过程:
//第一个是需要转账的用户第二个是转入的用户,最后的值是转入的金额
call val_transferAccounts('22222','11111',100);
MySQL中用存储过程实现银行转账并且在另一张表中添加一条数据相关推荐
- mysql 表中添加数据类型_MySQL数据表添加字段(三种方式)
MySQL 数据表是由行和列构成的,通常把表的"列"称为字段(Field),把表的"行"称为记录(Record).随着业务的变化,可能需要在已有的表中添加新的字 ...
- mysql 查询一张表在另一张表中不存在的数据
mysql数据库中一张表与另一张表有相同的一个字段,需要过滤出 表t_camera 中在 t_sys_role_camera表中不存在的数据,利用关键字 NOT EXISTS来实现. 同理可以使用EX ...
- mysql获取一个表的数据作为值插入_请问如何在mysql中得到一个即将插入数据表中的那条数据的id值(id自增长)?...
我们在写数据库程序的时候,经常会需要获取某个表中的最大序号数, 一般情况下获取刚插入的数据的id,使用select max(id) from table 是可以的. 但在多线程情况下,就不行了. 下面 ...
- mysql 存储过程新增表,mysql实例 存储过程中向表中添加数据
摘要 腾兴网为您分享:mysql实例 存储过程中向表中添加数据,信和财富,视达网,人人视频,企商理财等软件知识,以及电视猫,office2000,贵阳银行,搜电共享充电宝,雅图电影院,达达跑腿,万圣节 ...
- mysql根据id删除数据库,MYSQL删除表中的指定ID数据
MYSQL删除表中的指定ID数据 删除A表中的ID 中的开头以B* 的数据库. 复制代码 代码如下: delete FROM A WHERE id like 'B%' 单独删除 A 表中的ID B 复 ...
- mysql 表中添加唯一约束
mysql表中添加唯一约束 在做权限系统中,有一张表叫用户角色关系表(user_role_relation),这张表中有user_id 和role_id(建表语句如下). CREATE TABLE u ...
- mysql 把表的值用来计算_mysql一张表到底能存多少数据?
前言 程序员平时和mysql打交道一定不少,可以说每天都有接触到,但是mysql一张表到底能存多少数据呢?计算根据是什么呢?接下来咱们逐一探讨 知识准备 数据页 在操作系统中,我们知道为了跟磁盘交互, ...
- mysql bench建立一张表_使用MySQL Workbench建立数据库,建立新的表,向表中添加数据...
点击上图中的"加号"图标,新建一个连接, 如上图,先输入数据库的账号密码,帐号默认为root,填好密码后 点击"OK",连接就建立好了,建立完成后,会出现一个长 ...
- java窗口向mysql加信息_Java中如何实现向DBC方式向表中添加数据
原标题:Java中如何实现向DBC方式向表中添加数据 Java中如何实现向DBC方式向表中添加数据 Java程序JDBC方式向数据库的表添加记录的步骤: 1.新建工程: Java Project 2. ...
最新文章
- 我热爱计算机作文500字,电脑吸引了我
- hdu2492 数状数组或者线段树
- 30分钟LINQ教程
- 【Python基础】Pandas向量化字符串操作
- Dubbo原理和源码解析之服务引用
- [攻防世界 pwn]——level0
- c语言编常见算法,5个常见C语言算法
- 谈一类神奇的数据结构——猫树
- uniapp小程序迁移到TS
- 【TensorFlow-windows】(六) CNN之Alex-net的测试
- π-Algorithmist分类题目(2)
- 用 SQL 脚本读取Excel 中的sheet数量及名称
- Linux 常用ping命令详解
- Ulipad快捷键大总结
- 主流的质量管理和项目管理及研发管理体系探索
- 阿里P7、P8、P9级别需要多少年的工作经验,还是因能力而定?
- 哪类人适合学软件测试?零基础能学测试吗?
- ACProtect ——脱壳
- 郁亮的“权力游戏”,万科的“内外战争”
- 染发染膏的认识与使用