--?定義序列表 DROP?TABLE?IF?EXISTS?sequence; CREATE?TABLE?sequence?( ????name?VARCHAR(50)?NOT?NULL, ????current_value?INT?NOT?NULL, ????increment?INT?NOT?NULL?DEFAULT?1, ????PRIMARY?KEY?(name) )?ENGINE=InnoDB; ? --?獲取當前序列號 DROP?function?IF?EXISTS?currval; DELIMITER?$ CREATE?FUNCTION?currval?(seq_name?VARCHAR(50)) RETURNS?INTEGER CONTAINS?SQL BEGIN ????DECLARE?value?INTEGER; ????SET?value?=?0; ????SELECT?current_value?INTO?value ????FROM?sequence ????WHERE?name?=?seq_name; ????RETURN?value; END$ DELIMITER?; ? --?獲取下一個序列號 DROP?FUNCTION?IF?EXISTS?nextval; DELIMITER?$ CREATE?FUNCTION?nextval?(seq_name?VARCHAR(50)) RETURNS?INTEGER CONTAINS?SQL BEGIN ????UPDATE?sequence?SET?current_value?=?current_value?+?increment ????WHERE?name?=?seq_name; ????RETURN?currval(seq_name); END$ DELIMITER?; ? --?重設序列號 DROP?FUNCTION?IF?EXISTS?setval; DELIMITER?$ CREATE?FUNCTION?setval?(seq_name?VARCHAR(50),?value?INTEGER) RETURNS?INTEGER CONTAINS?SQL BEGIN ????UPDATE?sequence?SET?current_value?=?value ????WHERE?name?=?seq_name; ????RETURN?currval(seq_name); ????END$ DELIMITER?; ? --?初始化數據 INSERT?INTO?sequence?VALUES?('SAMPLE',?1,?1); ? --?測試 SELECT?currval('SAMPLE'); SELECT?nextval('SAMPLE'); SELECT?nextval('SAMPLE'); SELECT?setval('SAMPLE',150); SELECT?currval('SAMPLE'); SELECT?nextval('SAMPLE'); SELECT?nextval('SAMPLE');
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END