现有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个序列号。
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个序列号。
如果你知道ORACLE的缓存机制,看看能否在MYSQL中用代码实现(可能要修改源码)
取得起始值(加上FOR UPDATE)->加+1->写回表中不如自增方便