mysql进行创建序列化
由于mysql没有序列化,我们可见创建一个中间表来代替它,同时我们还需要进行取进行写一些方法来限制这个中间表,做到能够满足我们的需求。
建表结构:
DROP TABLE IF EXISTS `sequence`;
CREATE TABLE `sequence` (
`name` varchar(30) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
`current_value` int(11) NULL DEFAULT NULL,
`crement` int(11) NULL DEFAULT NULL
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of sequence
-- ----------------------------
INSERT INTO `sequence` VALUES ('ucode_seq', 202200003, 1);
SET FOREIGN_KEY_CHECKS = 1;
然后我们需要在在查询中写一些函数,来实现我们的序列化自增。
-- 创建获取当前值
DROP FUNCTION IF EXISTS currval ;
DELIMITER $
CREATE FUNCTION currval(seq_name VARCHAR(30))
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;
-- 获取查询当前序列值
SELECT currval('ucode_seq')
-- 创建获取下一个值的函数
DROP FUNCTION IF EXISTS nextval;
DELIMITER $
CREATE FUNCTION nextval (seq_name VARCHAR(30))
RETURNS INTEGER
LANGUAGE SQL
DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
BEGIN
UPDATE sequence
SET current_value = current_value + crement
WHERE NAME = seq_name;
RETURN currval(seq_name);
END
$
-- DELIMITER;
-- 查询下一个值
SELECT nextval("ucode_seq");
进行运行查看当前序列的值
在去执行下面的函数后,进行查询下一个值。
获取到下一个序列值后,我们可以查看数据表,也会进行变化。