您的位置:首页 > 产品设计 > UI/UE

给 MySQL 增加 Sequence 管理功能

2012-02-14 14:31 260 查看
-- Sequence 管理表 DROP TABLE IF EXISTS sequence; CREATE TABLE sequence ( 	name VARCHAR(50) NOT NULL, 	current_value INT NOT NULL, 	increment INT NOT NULL DEFAULT 1, 	PRIMARY KEY (name) ) ENGINE=InnoDB;  -- 取当前值的函数 DROP FUNCTION IF EXISTS currval; DELIMITER $ CREATE FUNCTION currval (seq_name VARCHAR(50)) 	RETURNS INTEGER 	LANGUAGE SQL 	DETERMINISTIC 	CONTAINS SQL 	SQL SECURITY DEFINER 	COMMENT '' BEGIN 	DECLARE value INTEGER; 	SET value = 0; 	SELECT current_value INTO value 		FROM sequence 		WHERE name = seq_name; 	RETURN value; END $ DELIMITER ;  -- 取下一个值的函数 DROP FUNCTION IF EXISTS nextval; DELIMITER $ CREATE FUNCTION nextval (seq_name VARCHAR(50)) 	RETURNS INTEGER 	LANGUAGE SQL 	DETERMINISTIC 	CONTAINS SQL 	SQL SECURITY DEFINER 	COMMENT '' BEGIN 	UPDATE sequence 		SET current_value = current_value + increment 		WHERE name = seq_name; 	RETURN currval(seq_name); END $ DELIMITER ;  -- 更新当前值的函数 DROP FUNCTION IF EXISTS setval; DELIMITER $ CREATE FUNCTION setval (seq_name VARCHAR(50), value INTEGER) 	RETURNS INTEGER 	LANGUAGE SQL 	DETERMINISTIC 	CONTAINS SQL 	SQL SECURITY DEFINER 	COMMENT '' BEGIN 	UPDATE sequence 		SET current_value = value 		WHERE name = seq_name; 	RETURN currval(seq_name); END $ DELIMITER ;  /* -- 测试 INSERT INTO sequence VALUES ('TestSeq', 0, 1); SELECT SETVAL('TestSeq', 10); SELECT CURRVAL('TestSeq'); SELECT NEXTVAL('TestSeq'); */
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: