mysql进行创建序列化

mysql进行创建序列化

image-20220512161857312

image-20220512161908963

image-20220512161922013


由于mysql没有序列化,我们可见创建一个中间表来代替它,同时我们还需要进行取进行写一些方法来限制这个中间表,做到能够满足我们的需求。

建表结构:

image-20220514145034619

image-20220514145557853

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");

进行运行查看当前序列的值

image-20220514150008406

在去执行下面的函数后,进行查询下一个值。

image-20220514150143923

获取到下一个序列值后,我们可以查看数据表,也会进行变化。

image-20220514150243543

 
posted @ 2022-05-14 15:05  孤巷一人i  阅读(299)  评论(0编辑  收藏  举报