/*
Mysql数据库练习
需求:创建一张表,包含四个字段(pid,name,age,sex),然后使用存储过程实现添加数据,要求
1 pid 为自增主键
2 插入数据的时候值添加姓名和年龄
3 性别采用随机数的方式生成
测试数据如下:
张珊 23
李四 22
王五 33
田七 27
赵六 32
*/
-- 创建测试数据库
create database exer ;
-- 使用数据库
use exer;
-- 创建表
drop table if exists tb_person;
create table tb_person(
pid varchar(10),
name varchar(20),
age integer,
sex varchar(1),
primary key(pid)
);
-- 创建存储过程,如果以前的存在,先删除
drop procedure if exists randSex;
delimiter //
create PROCEDURE randSex(in `name` varchar(20),in age int)
begin
-- 声明字符串变量pKey存放表的pid,sex存放年龄
declare pKey,sex varchar(10);
-- 声明int变量,用于存放生成性别的随机数0 - 1
declare var INT;
-- 查询表tb_person的最大pid,存入pKey中
select max(pid) into pKey from tb_person;
-- 如果pKey是空的,就设置初始值为'P_0001'
if pKey is null then
set pKey = 'P_0001';
else
/*
pKey存在
1 截取pKey中的数字部分,加1后重新拼接成 'P_0001'的形式
2 重新赋值给pKey
*/
set pKey = concat('P_',lpad(SUBSTRING(pKey,INSTR(pKey,'_')+1)+1,4,0));
end if;
-- 设置var为rand()函数*2取整数既 0 或者 1
set var = floor(rand()*2);
/*
如果var = 1 设置sex为男,否则设置为女
*/
if var = 1 then
set sex ='男';
else
set sex = '女';
end if;
-- 拼接添加sql,将参数传递进去
set @sqlcmd = concat('insert into tb_person(pid,name,age,sex) value(\'',pKey,'\',\'',name,'\',',age,',\'',sex,'\')');
-- 传递给 stmt
prepare stmt from @sqlcmd;
-- 执行sql
execute stmt;
DEALLOCATE PREPARE stmt;
-- 查看拼接的sql
select @sqlcmd as `sql`;
end;
//
delimiter;
-- 测试
call randSex('张珊',23);
CALL randSex('李四',22);
CALL randSex('王五',33);
CALL randSex('田七',27);
CALL randSex('赵六',32);
--查看结果
select * from tb_person;