MySQL模拟Oracle序列sequence
发布日期:2025-04-18 00:42:41 浏览次数:18 分类:精选文章

本文共 1156 字,大约阅读时间需要 3 分钟。

?????????

???????

???????????????????

CREATE TABLE sys_sequence (  seq_name VARCHAR(50) NOT NULL,  curr_value BIGINT NOT NULL DEFAULT 0,  increment_by INT NOT NULL DEFAULT 1,  PRIMARY KEY (seq_name)) ENGINE=INNODB;

??????

????????

INSERT INTO sys_sequence VALUES ('SEQ_TEST_NO', 10000, 1);

currval????

?????????????

DELIMITER $$DROP FUNCTION IF EXISTS currval $$CREATE FUNCTION currval(v_seq_name VARCHAR(50)) RETURNS BIGINT CONTAINS SQL BEGIN  DECLARE v_currval BIGINT;  SET v_currval = 1;  SELECT curr_value INTO v_currval   FROM sys_sequence   WHERE seq_name = v_seq_name;  RETURN v_currval;END$$DELIMITER ;

nextval????

??????????????

DELIMITER $$DROP FUNCTION IF EXISTS `nextval` $$CREATE FUNCTION `nextval` (`v_seq_name` VARCHAR(50)) RETURNS BIGINT (20) CONTAINS SQL BEGIN  UPDATE sys_sequence   SET `curr_value` = LAST_INSERT_ID(`curr_value` + `increment_by`)   WHERE `seq_name` = v_seq_name;  RETURN LAST_INSERT_ID();END$$DELIMITER ;

????

????currval?nextval???

  • currval('SEQ_TEST_NO') - ???????
  • nextval('SEQ_TEST_NO') - ???????????
上一篇:Mysql模糊查询like效率,以及更高效的写法
下一篇:mysql格式化日期和时间

发表评论

最新留言

逛到本站,mark一下
[***.202.152.39]2026年06月10日 18时43分06秒