通常我们设置主键自增都是通过MySQL提供的自增(increment)来实现的,如果需要设置多个字段自增,MySQL是实现不了的,但是我们可以通过创建序列表,使用获取序列当前值和获取序列下一个值两个函数来对字段进行自增
- 创建序列表
DROP TABLE IF EXISTS `sequence`;
CREATE TABLE `sequence` (
`seq_name` varchar(50) CHARACTER NOT NULL, -- 序列名称
`current_val` int(11) NOT NULL, --当前值
`increment_val` int(11) NOT NULL, --步长
PRIMARY KEY (`seq_name`)
) ENGINE = InnoDB DEFAULT CHARSET=utf8 ;
- 创建函数:获取序列当前值
delimiter分隔符 :默认是分号( ; ),表示遇到分号该语句执行结束
delimiter &&:表示&&为结束符。
delimiter &&
CREATE FUNCTION currval (v_seq_name VARCHAR(50)) RETURNS INTEGER
BEGIN
DECLARE current_value INTEGER;
SET current_value = 0;
SELECT
current_val INTO current_value
FROM
sequence
WHERE
seq_name = v_seq_name;
RETURN current_value;
END &&
- 创建函数:获取序列下一个值
delimiter &&
CREATE FUNCTION nextval (v_seq_name VARCHAR(50)) RETURNS INTEGER
BEGIN
DECLARE current_value INTEGER;
SET current_value = 0;
SELECT
current_val + increment_val INTO current_value
FROM
sequence
WHERE
seq_name = v_seq_name FOR UPDATE;
UPDATE sequence
SET current_val = current_value
WHERE
seq_name = v_seq_name;
RETURN current_value;
END &&
- 新增序列
INSERT INTO sequence (`seq_name`, `current_val`, `increment_val`) VALUES ('SSR_REQUEST_NO', 1, 1);
- 查询当前值 和 查询下一个值
SELECT currval('SSR_REQUEST_NO'); //查询当前值
SELECT nextval('SSR_REQUEST_NO'); //查询下一个值