Skip to content

Instantly share code, notes, and snippets.

@shield-9
Last active March 18, 2016 06:32
Show Gist options
  • Save shield-9/f151c70c1288288e5474 to your computer and use it in GitHub Desktop.
Save shield-9/f151c70c1288288e5474 to your computer and use it in GitHub Desktop.
MySQL Sequence Emulation (Licensed under CC0)
INSERT INTO sequence values('one', 100);
INSERT INTO sequence values('two', 1000);
SELECT sequence('one');
SELECT sequence('two');
SELECT sequence('one');
SELECT sequence('one');
SELECT sequence('two');

sequence_insert() * 10000

real    0m0.946s
user    0m0.082s
sys     0m0.064s

sequence_update() * 10000

real    0m1.111s
user    0m0.069s
sys     0m0.071s
CREATE TABLE sequence (
name VARCHAR(20) NOT NULL PRIMARY KEY,
value INT unsigned NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
delimiter //
CREATE FUNCTION sequence_update(seq_name VARCHAR(20))
RETURNS INT
BEGIN
UPDATE sequence SET value=LAST_INSERT_ID(value+1) WHERE name=seq_name;
RETURN LAST_INSERT_ID();
END
//
delimiter ;
delimiter //
CREATE FUNCTION sequence_insert(seq_name VARCHAR(20))
RETURNS INT
BEGIN
INSERT INTO sequence (name, value) VALUES (seq_name, LAST_INSERT_ID(1))
ON DUPLICATE KEY UPDATE value=LAST_INSERT_ID(value+1);
RETURN LAST_INSERT_ID();
END
//
delimiter ;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment