-- 創(chuàng)建 用戶賬號(hào)表(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()
)
-- 創(chuàng)建 用戶基本信息表(UserInfo)
create table UserInfo
(
id int auto_increment primary key,
accountid int not null,
truename varchar(50) not null comment '用戶真實(shí)姓名',
age int not null comment '年齡'
)
set @code = '';
set @msg = '';
-- 調(diào)用存貯過(guò)程
call p_register('sss@sohu.com',123,'江紅',20,@code,@msg);
-- 輸出存貯過(guò)程執(zhí)行后的結(jié)果
select @code,@msg;
drop PROCEDURE p_register;
-- 創(chuàng)建用戶注冊(cè)存貯過(guò)程
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
-- 如果存在當(dāng)前用戶
if EXISTS(select * from useraccount where loginname = _loginname) then
set _code = 1;
set _msg = '對(duì)不起,您使用的用戶名已經(jīng)存在';
else
begin
-- 用戶ID(插入用戶賬號(hào)表(UserAccount)時(shí)得Id信息)
declare _userId int default 0;
-- 事務(wù)出錯(cuò)的標(biāo)志
declare _err int default 0;
-- 事務(wù)出錯(cuò)時(shí)將錯(cuò)誤信息保存到 _err中
declare continue handler for sqlexception set _err = 1;
-- 開(kāi)啟事務(wù)
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);
-- 無(wú)異常
if _err = 0 then
set _code = 0;
set _msg = conat('恭喜您',_truename,',注冊(cè)成功!');
commit;
-- commit work;(commit 或 commit work 兩個(gè)都行)
else -- 有異常
set _code = 1;
set _msg = '對(duì)不起,注冊(cè)失敗請(qǐng)重試!';
rollback;
-- rollback work;(rollback; 或 rollback work; 兩個(gè)都行)
end if;
end;
end if;
end