现有mysql存储过程如下:
delimiter //CREATE PROCEDURE sequence   ( IN seqName varchar(30),  OUT val INT )BEGIN    declare  maxValue int;   declare  minValue int;   declare  nowValue int;     select min_value,max_value,seq_value into minValue,maxValue,nowValue from  comm_seq  where seq_name=seqName for update;   if nowValue<maxValue  then
 
    update comm_seq set seq_value=seq_value+1 where seq_name=seqName; 
   
   else   update comm_seq set seq_value=minValue where seq_name=seqName;
 
  end if;  select seq_value into val from comm_seq  where seq_name=seqName;    commit;
  
END;//
希望加上缓存机制,一次取出20个序列号,分配完后再重新拿到20个序列号。

解决方案 »

  1.   

    oracle中的序列有缓存机制。我希望这个存储过程能简单模仿它的缓存机制。
      

  2.   

    呵呵, MYSQL不是oracle,没有缓存机制
      

  3.   

    OR
    如果你知道ORACLE的缓存机制,看看能否在MYSQL中用代码实现(可能要修改源码)
      

  4.   

    实现序列号的自增,如果加上缓存机制,运行速度会快一些。一次请求分配20个序列号,20个序列号在内存中,如果没有用完,直接用内存的已生成好的就可以了。有点数据库缓冲池的意思。这是我的理解。我对mysql对于缓存这块的支持了解很少。
      

  5.   

    如果是自增,插入后,可以用LAST_INSERT_ID() 得到,在网络上要考虑并发
      

  6.   

    oracle中序列的生成用了缓存机制,开启了线程,mysql的存储过程中能开启线程吗?
      

  7.   

    MYSQL在存储过程开启线程?不能
      

  8.   

    如果是自增,插入后,可以用LAST_INSERT_ID() 得到,在网络上要考虑并发很对,所以才用mysql存储过程实现,生成4位有序数。
      

  9.   

    用SP实现,同样要考虑并发,MYSQL没有oracle中的序列缓存机制
      

  10.   

    spring吗?spring框架对这方面有支持吗?
      

  11.   

    思路:
    取得起始值(加上FOR UPDATE)->加+1->写回表中不如自增方便
      

  12.   

    MYSQL中无法实现。你可以通过存储过程近似的实现。 上次好像已经告诉过你了。 另外创建一个表 create table seq(sid int auto_increment primary key);然后你可以直接 insert into seq values (null),(null),(null); 一次占用三个号码。并且通过last_insert_id 得到第一个号码。