1. 程式人生 > >使用資料庫儲存過程建立初始化資料記錄

使用資料庫儲存過程建立初始化資料記錄

目標需求:後臺管理系統的初始化管理員由於需繫結地區編碼,傳統手動建立使用者由於關聯表格較多,一次建立需花費較多時間,如若在後臺建立初始化服務存在一定的風險,擇優選擇資料庫指令碼自動生成

使用者表: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,'[email protected]',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);