use uap;
DROP TABLE IF EXISTS sequence;
CREATE TABLE sequence (
seq_name VARCHAR(50) NOT NULL COMMENT '主键' ,
current_val INT NOT NULL COMMENT '当前值' ,
increment_val INT NOT NULL COMMENT '步长',
note VARCHAR(200) COMMENT '备注',
PRIMARY KEY (seq_name)
) COMMENT '自增队列';
INSERT INTO sequence (seq_name, current_val, increment_val) VALUES
('uap-a-pk', 1, 1),
('uap-b-pk', 1, 3),
('uap-c-pk', 1, 5);
select * from sequence;
DROP FUNCTION IF EXISTS `nextval`;
DELIMITER ;;
CREATE DEFINER=`zjft`@`%` FUNCTION `nextval`(v_seq_name VARCHAR(50))
RETURNS int(11)
DETERMINISTIC
BEGIN
UPDATE sequence set current_val = current_val + increment_val where seq_name = v_seq_name;
return currval(v_seq_name);
END
;;
DELIMITER ;
DROP FUNCTION IF EXISTS `currval`;
DELIMITER ;;
CREATE DEFINER=`zjft`@`%` FUNCTION `currval`(v_seq_name VARCHAR(50)) RETURNS int(11)
DETERMINISTIC
BEGIN
return (select current_val from sequence where seq_name = v_seq_name);
END
;;
DELIMITER ;
select nextval('uap-a-pk');