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;

    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值