MySQL的存贮过程加事务,做个笔记

-- 创建 用户账号表(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

你可能感兴趣的:(MySQL的存贮过程加事务,做个笔记)