数据库 表中主键字符串通过函数取值

来源:互联网 发布:手机淘宝 无响应 编辑:程序博客网 时间:2024/06/05 04:56

如果项目中有特殊要求,表的主键id用varchar类型,那么自增方式只能通过函数来解决。思路就是在函数中定义开始值和最大值,如果通过参数在某表中查无数据就赋值1,有数据就加一,另给该id做了类似加密

首先需要定义表来存放参数 ,记录当前数据 tbl_base_seq


其次定义函数fun_create_id

BEGIN DECLARE cRES_ID varchar(32);#返回值 DECLARE RES_ID INT(32) UNSIGNED;#递增值 DECLARE prefix varchar(30); DECLARE vextract varchar(30); DECLARE temp_start INT(32) UNSIGNED;#初始值 DECLARE temp_end INT(32) UNSIGNED;#最大值 DECLARE len INT(3) UNSIGNED;#最大值长度  #查询当前属性,IN_SEQ_NAME是参数  SELECT MAX(s.seq_current),MAX(s.seq_prefix),MAX(seq_extract),MAX(seq_start),MAX(seq_end) INTO RES_ID,prefix,vextract,temp_start,temp_end FROM TBL_BASE_SEQ s WHERE s.seq_name   =  IN_SEQ_NAME; # 查询参数不在表则把该参数插入表 IF RES_ID IS NULL or RES_ID = '' THEN     INSERT INTO tbl_base_seq(seq_name,seq_current,seq_start) VALUES(IN_SEQ_NAME,1,1);    SET RES_ID  = 1;  END IF;  IF temp_end IS NULL or temp_end = '' THEN    set temp_end  = 99999999;  END IF;  IF prefix IS NULL OR prefix ='' THEN   set prefix  = 'yymmddhh24miss';  END IF;  set len  = LENGTH(temp_end);#有最大值  IF  RES_ID<temp_end THEN        UPDATE tbl_base_seq SET seq_current  = seq_current+1 WHERE seq_name   =  IN_SEQ_NAME;  ELSE        UPDATE tbl_base_seq SET seq_current  = 1 WHERE seq_name   =  IN_SEQ_NAME;    END IF;     # 增加前缀  IF prefix IS NOT NULL and prefix != '' THEN   # SELECT CONCAT(TO_CHAR(SYSDATE, prefix),RES_ID) INTO RES_ID FROM DUAL;select  concat(DATE_FORMAT(now(),'%y%m%d%H%i%s'),LPAD(CONCAT(RES_ID,''),len,'0'))  INTO cRES_ID FROM DUAL;#日期  0填充 RES_ID 到len长度ELSEselect RES_ID INTO cRES_ID FROM DUAL;  END IF;  #增加后缀  IF vextract IS NOT NULL and vextract != '' THEN    #SELECT CONCAT(RES_ID,TO_CHAR(SYSDATE, vextract)) INTO cRES_ID FROM DUAL;   select concat(LPAD(CONCAT(RES_ID,''),len,'0'),DATE_FORMAT(now(),'%y%m%d%H%i%s'))  into cRES_ID from dual;  END IF;  RETURN cRES_ID; END


注:
CONCAT(str1,str2....)是字符串拼接
DATE_FORMAT(now(),'%y%m%d%H%i%s')是已某格式显示日期
LPAD(str,len,str2)是在str左边填充str2直到长度为len


在sql窗口我们可以通过传任意表id来取值

开始是空表

例如:select fun_create_id('userId')


阅读全文
0 0
原创粉丝点击