Mysql实现字符串主键自增示例教程

/*
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;

Mysql实现字符串主键自增示例教程_第1张图片

    

你可能感兴趣的:(学习实践)