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