使用数据库存储过程创建初始化数据记录

目标需求:后台管理系统的初始化管理员由于需绑定地区编码,传统手动创建用户由于关联表格较多,一次创建需花费较多时间,如若在后台创建初始化服务存在一定的风险,择优选择数据库脚本自动生成

用户表:t_admin_user

CREATE TABLE `t_admin_user` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `areaid` int(11) NOT NULL,
  `pid` int(11) DEFAULT NULL COMMENT '上级',
  `account` varchar(64) NOT NULL COMMENT '账号',
  `password` varchar(32) NOT NULL COMMENT '密码',
  `display_name` varchar(128) DEFAULT NULL COMMENT '展示名',
  `perf_score` int(11) NOT NULL COMMENT '考核分数',
  `qrcode_id` varchar(32) DEFAULT NULL,
  `email` varchar(128) NOT NULL COMMENT '邮箱',
  `user_auth_type` int(4) DEFAULT NULL COMMENT '用户类型:1-超管,',
  `mobile` varchar(32) NOT NULL COMMENT '手机号码',
  `address` varchar(128) DEFAULT NULL COMMENT '地址',
  `company` varchar(128) DEFAULT NULL COMMENT '单位',
  `is_logined` int(11) DEFAULT '2' COMMENT '是否登陆过系统:1-登录过,2-从未登录',
  `mobile_type` varchar(512) DEFAULT NULL COMMENT '手机类型',
  `direct_county` int(11) DEFAULT '2' COMMENT '是否为县直属:1-是,2-不是',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `qq` varchar(32) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `UK_t_user_account` (`account`)
) ENGINE=InnoDB AUTO_INCREMENT=1000000607 DEFAULT CHARSET=utf8 COMMENT='用户表';
 

角色表:t_admin_role

CREATE TABLE `t_admin_role` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `areaid` int(11) NOT NULL,
  `role_name` varchar(32) NOT NULL COMMENT '角色名称',
  `role_desc` varchar(256) DEFAULT NULL COMMENT '角色描述',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=500033 DEFAULT CHARSET=utf8 COMMENT='角色表';

用户角色关联表:t_admin_user_role

CREATE TABLE `t_admin_user_role` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `areaid` int(11) NOT NULL,
  `admin_user_id` int(11) NOT NULL COMMENT '用户id',
  `admin_role_id` int(11) NOT NULL COMMENT '角色id',
  `create_time` datetime DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=200331 DEFAULT CHARSET=utf8;

 

存储过程:

DROP PROCEDURE IF EXISTS SysCreate;
DELIMITER // 
CREATE PROCEDURE SysCreate (IN adminUserId INT,IN account VARCHAR(64),IN areaid INT,OUT result INT)
BEGIN
        DECLARE hasRow,maxId INT;
        DECLARE roleId INT DEFAULT 1;
        DECLARE EXIT HANDLER FOR SQLEXCEPTION  -- 捕捉错误,如果是sql错误就执行里面的
            BEGIN 
                -- ERROR 
                SET result = -1; -- 返回值-1,说明sql错误
                SELECT result;
                rollback;   -- 回滚数据
            END; 


        START TRANSACTION;  -- 开始事务
            SELECT COUNT(*) INTO hasRow FROM t_admin_user t WHERE t.id =  adminUserId OR t.account = account;
            IF hasRow > 0 THEN
                SET result = 0; -- 返回值0,说明sql错误
            ELSE
                INSERT INTO t_admin_user(id,areaid,pid,account,password,perf_score,email,user_auth_type,mobile,direct_county) VALUES(adminUserId,areaid,0,account,'123',10,'123@123.com',1,'13333333',2);
                select max(id) INTO maxId from t_admin_role;
                IF maxId IS NOT NULL THEN
                    SET roleId = maxId + 5;
                END IF;
                INSERT INTO t_admin_role(id,areaid,role_name,role_desc,create_time) VALUES(roleId,areaid,'超级管理员','超级管理员',NULL);
                INSERT INTO t_admin_user_role(id,areaid,admin_user_id,admin_role_id,create_time) VALUES (NULL,areaid,adminUserId,roleId,NULL);
                -- FOR                    
                SET result = 1; -- 返回值1,说明sql正常
            END IF;
        COMMIT;  -- 提交

        SELECT result;   
END // 

CALL SysCreate(110000,'admin_xx',350524,@result);

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值