Heim >Datenbank >MySQL-Tutorial >MySQL 简易序列

MySQL 简易序列

WBOY
WBOYOriginal
2016-06-07 14:56:281028Durchsuche

这是为 MySQL 编写的简易序列存储程序(一个函数)。 在使用序列之前,需要通过往序列记录表中加入数值的方式初始化序列: INSERT INTO Sequence ('name...', 0); 之后,就可以通过 nextval('name...') 函数来取得名为 name... 的序列新值。 考虑到 update 自

这是为 MySQL 编写的简易序列存储程序(一个函数)。
在使用序列之前,需要通过往序列记录表中加入数值的方式初始化序列:
INSERT INTO Sequence ('name...', 0);
之后,就可以通过 nextval('name...') 函数来取得名为 name... 的序列新值。
考虑到 update 自身的行锁能力。所以本序列程序具有很强的并发提供能力。
DROP TABLE IF EXISTS Sequence;
CREATE TABLE Sequence
(
  name      VARCHAR(32),
  maxIndex  INTEGER,
  CONSTRAINT cst_Sequence_pk PRIMARY KEY (name, maxIndex)
) DEFAULT CHARACTER SET utf8
ENGINE InnoDB;
SET GLOBAL log_bin_trust_function_creators = 1;
DROP FUNCTION IF EXISTS nextval;
DELIMITER //
CREATE FUNCTION nextval(sequenceName VARCHAR(32))
  RETURNS INTEGER
  NOT DETERMINISTIC
  CONTAINS SQL
/* ********** ********** ********** **********
This is a common sequence function. It is based on table Sequence.
This function will return new integer by given sequence name.
author:		Shane Loo Li
version:	1.1.1, 2012-7-17 Tuesday	Modified edition.
history:
1.1.0, 2012-7-14 Saturday	Shane Loo Li	New
1.1.1, 2012-7-17 Tuesday	Shane Loo Li	Modified wrong column name.
********** ********** ********** ********** */
BEGIN

  DECLARE iMaxIndex INTEGER;

  UPDATE Sequence SET maxIndex = maxIndex + 1 WHERE name = sequenceName;
  SELECT maxIndex INTO iMaxIndex
    FROM Sequence WHERE name = sequenceName;

  RETURN iMaxIndex;

END
//
DELIMITER ;
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:给存储过程添加公共执行权限Nächster Artikel:收缩数据库