MySQL序列解決方案

--?定義序列表  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
喜歡就支持一下吧
點贊9 分享