-- 创建 用户账号表(UserAccount)
create table useraccount
(
id int auto_increment PRIMARY key,
loginname varchar(50) not null,
pwd varchar(50) not null,
createtime datetime not null default now()
)
-- 创建 用户基本信息表(UserInfo)
create table UserInfo
(
id int auto_increment primary key,
accountid int not null,
truename varchar(50) not null comment '用户真实姓名',
age int not null comment '年龄'
)
set @code = '';
set @msg = '';
-- 调用存贮过程
call p_register('[email protected]',123,'江红',20,@code,@msg);
-- 输出存贮过程执行后的结果
select @code,@msg;
drop PROCEDURE p_register;
-- 创建用户注册存贮过程
create procedure p_register
(
in _loginname varchar(50),
in _pwd varchar(50),
in _truename varchar(50),
in _age int,
out _code varchar(50),
out _msg varchar(50)
)
begin
-- 如果存在当前用户
if EXISTS(select * from useraccount where loginname = _loginname) then
set _code = 1;
set _msg = '对不起,您使用的用户名已经存在';
else
begin
-- 用户ID(插入用户账号表(UserAccount)时得Id信息)
declare _userId int default 0;
-- 事务出错的标志
declare _err int default 0;
-- 事务出错时将错误信息保存到 _err中
declare continue handler for sqlexception set _err = 1;
-- 开启事务
start transaction;
-- begin
insert into useraccount(loginname,pwd) values(_loginname,_pwd);
-- 新插入用户信息Id
set _userid = last_insert_id();
-- 用户基本信息表(UserInfo)
insert into userinfo(accountid,truename,age) values(_userid,_truename,_age);
-- 无异常
if _err = 0 then
set _code = 0;
set _msg = conat('恭喜您',_truename,',注册成功!');
commit;
-- commit work;(commit 或 commit work 两个都行)
else -- 有异常
set _code = 1;
set _msg = '对不起,注册失败请重试!';
rollback;
-- rollback work;(rollback; 或 rollback work; 两个都行)
end if;
end;
end if;
end