MySQL模拟Oracle序列sequence
2017-11-30 18:37
585 查看
DROP TABLE IF EXISTS sys_sequence ;
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);
DELIMITER $$
DROP FUNCTION IF EXISTS currval $$
CREATE
/*[DEFINER = { user | CURRENT_USER }]*/
FUNCTION currval(v_seq_name VARCHAR (50))
RETURNS BIGINT
/*LANGUAGE SQL
| [NOT] DETERMINISTIC
| { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
| SQL SECURITY { DEFINER | INVOKER }
| COMMENT 'string'*/
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 ;
-- SELECT `currval`('SEQ_TEST_NO');
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 ;
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);
DELIMITER $$
DROP FUNCTION IF EXISTS currval $$
CREATE
/*[DEFINER = { user | CURRENT_USER }]*/
FUNCTION currval(v_seq_name VARCHAR (50))
RETURNS BIGINT
/*LANGUAGE SQL
| [NOT] DETERMINISTIC
| { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
| SQL SECURITY { DEFINER | INVOKER }
| COMMENT 'string'*/
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 ;
-- SELECT `currval`('SEQ_TEST_NO');
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 ;
相关文章推荐
- MySQL实现类似Oracle的序列 - sequence
- mysql模拟oracle序列
- 在mysql中模拟oracle的sequence
- MySQL模拟Oracle的Sequence两种方法
- mysql通过表和function模拟oracle的sequence
- MySQL模拟Oracle的Sequence两种方法
- MySQL实现ORACLE序列(Sequence)的解决方案
- 在Mysql中模拟oracle中的sequence进行自动增长设计方案
- Oracle中使用触发器(trigger)和序列(sequence)模拟实现自增列实例
- 在mysql 中模拟oracle中的 sequence功能
- Oracle和Mysql分别生成sequence序列
- Oracle中使用触发器(trigger)和序列(sequence)模拟实现自增列实例
- mysql 如何设置自动增长序列 sequence(二) 在实际中调用
- Oracle(15)序列sequence
- MySQL实现序列(Sequence)效果
- ORACLE update使用序列sequence
- oracle如何实现自增?----用序列sequence的方法来实现
- oracle-序列(SEQUENCE)
- Oracle中序列sequence 用法
- mysql update忘加where条件的操作恢复(模拟oracle闪回)