MySQL中触发器的简单应用

开发中有这样一个业务场景:用户在注册某应用后,如要使用部分高级功能,则需要进行实名认证(绑定身份证信息)。
实现思路:后续的其他业务处理也会用到这个信息的判断,我们可以在用户信息表中加入是否实名的标识字段(rl_auth_flag),当用户实名认证成功(用户身份信息表usr_card_info添加数据成功)后,更新用户信息表中的认证标识字段,此处使用触发器实现,具体步骤如下:
1.新建用户信息表usr_info:

DROP TABLE IF EXISTS `usr_info`;
CREATE TABLE `usr_info`  (
  `uid` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `usr_no` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '用户编号',
  `usr_name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '用户姓名',
  `usr_phone` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '电话',
  `usr_sts` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '1' COMMENT '状态:0-非正常;1-正常',
  `rl_auth_flag` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '是否实名认证:0-未实名;1-已实名',
  `create_time` datetime(0) NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '创建时间',
  `update_time` datetime(0) NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '更新时间',
  `remark` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备注',
  PRIMARY KEY (`uid`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '用户信息表' ROW_FORMAT = Dynamic;

SET FOREIGN_KEY_CHECKS = 1;

2.用户身份信息表usr_card_info

DROP TABLE IF EXISTS `usr_card_info`;
CREATE TABLE `usr_card_info`  (
  `card_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `usr_no` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '用户编号',
  `card_no` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '身份证号码',
  `card_name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '身份证姓名',
  `card_birth` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '出生年月',
  `card_age` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '身份证年龄',
  `card_pro` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '省份',
  `card_city` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '市',
  `card_address` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '身份证地址',
  `card_exp_date` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '有效期',
  `delete_flag` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '1' COMMENT '删除标志:0-已删除;1-正常',
  `remark` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备注',
  PRIMARY KEY (`card_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '身份信息表' ROW_FORMAT = Dynamic;

3.给usr_card_info添加两个触发器,新增成功时,更新usr_info的认证标识为1,删除(解绑)时更新usr_info的认证标识为0.
在这里插入图片描述
在这里插入图片描述
4.添加完成后保存,现在我们给用户信息表添加一条数据,模拟新用户注册完成;

INSERT INTO `t1`.`usr_info`(`usr_no`, `usr_name`, `usr_phone`, `create_time`, `update_time`) VALUES ('250100001', '赵云一号', '13800001111', '2021-02-06 21:58:09', '2021-02-06 21:58:14')

在这里插入图片描述

5.给用户信息表添加一条信息,模拟用户实名认证完成

INSERT INTO `t1`.`usr_card_info`(`usr_no`, `card_no`, `card_name`, `card_birth`, `card_age`, `card_pro`, `card_city`, `card_address`, `card_exp_date`) VALUES ('250100001', '610121190007254567', '赵云', '1900-07-25', '121', '河北省', '石家庄市', '河北石家庄市正定县北大街115号', '2099-12-30')

在这里插入图片描述
tips:实际场景中,让用户手动录入这些信息是非常不友好的,我们可以通过人脸识别+身份证识别来进行图像采集,数据的提取和归类通过程序来做就可以,关于人脸识别和图像识别,百度智能云给我们提供了丰富业务场景的API,可以满足我们绝大多数的应用。后续有时间的话,可以给大家分享我在项目中的应用
6.查看usr_info表信息,我们可以发现该用户的实名状态已经更新为1.

在这里插入图片描述
触发器实际上是存储过程的特殊表现形式,常用于加强数据的完整性约束和业务规则,同时也减少了业务代码的编写,但凡事有利有弊,过多的依赖触发器会影响数据库的结构,增加数据库的维护成本,比如,如果上述的业务逻辑发生了变化:需要用户录入身份证信息成功,且绑定本人名下银行卡成功后,才视为实名认证成功,我们则需要修改我们的触发器,而非业务代码。任何技术的学习都不是为了使用而使用,而是为了在解决问题的时候多一种选择的方案,所以还是根据实际场景来选择是否使用它吧。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值