【のMySQL]増加関数配列から実現

序文

現在のデータベースがあります。mysql
によるMySQLとOracleは、直接シーケンスをサポートしていませんが、同じではありませんので、あなたは根拠のSQL文で機能のシーケンスをシミュレートするために、テーブルを作成する必要があり、次のとおりです。

ステップ

1.シーケンステーブルを作成します。

CREATE  TABLE `sequence`(
  ` NAME` VARCHAR50)utf8_bin COLLATE NOT  NULL COMMENT ' 名前配列' 
  `current_value`のINT11NOT  NULL COMMENT ' シーケンスの現在の値' 
  'increment`のINT11NOT  NULL  DEFAULT  ' 1 ' COMMENT ' 値の配列から' PRIMARY  KEY ( `NAME`)
)ENGINE =InnoDB DEFAULT CHARSET = UTF8のCOLLATE = utf8_bin。

2.関数を作成し、現在の値をとります

DROP  FUNCTIONを IF  EXISTS CURRVAL。
区切り$ 
CREATE  FUNCTIONの CURRVAL(SEQ_NAME VARCHAR50 )) 
      RETURNS  INTEGER 
     LANGUAGE SQL 
     DETERMINISTICは
     CONTAINS SQL 
     SQL SECURITY DEFINERのが
     COMMENT '' 
BEGIN 
     DECLAREのINTEGERをSETの=  0 SELECT現在の値INTO FROM = SEQ_NAME。 
     返り値。 
ENDの
$の
DELIMITER。

3.値関数の削除を作成します。

DROP  FUNCTIONを IF  EXISTS NEXTVAL。
区切り$ 
CREATE  FUNCTIONの NEXTVAL(SEQ_NAME VARCHAR50 )) 
      RETURNS  INTEGER 
     LANGUAGE SQL 
     DETERMINISTICは
     CONTAINS SQL 
     SQL SECURITY DEFINERのが
     COMMENT '' 
BEGIN 
     UPDATEのシーケンス
           SETを現在の値=現在の値+ インクリメント 
          = SEQ_NAMEを。 
     返りCURRVAL(SEQ_NAME)。 
終わり
$の
DELIMITER。

4.現在の値を更新する機能を作成します。

DROP  FUNCTIONを IF  EXISTS SETVAL。
区切り$ 
CREATE  FUNCTIONの SETVAL(SEQ_NAME VARCHAR50)、値の整数RETURNS  INTEGER  
     LANGUAGE SQL 
     DETERMINISTICは
     CONTAINS SQL 
     SQL SECURITYのDEFINERの
     コメント''  
BEGIN  
     UPDATE シーケンス 
           SETの現在の値= = SEQ_NAMEを。 
     返りCURRVAL(SEQ_NAME)。 
ENDの
$ 
DELIMITER; 

データベースの構造

 

 コール

INSERT  INTOの配列VALUEStestSeq 01); - 配列名と初期値を加算し、そして増加から

SELECT SETVAL(testSeq 10); - の指定されたシーケンスの初期値を設定する

SELECT(CURRVAL ' testSeq  ;)- のクエリー配列指定された電流値

SELECT NEXTVAL(testSeq '); - クエリー配列は、次の値を指定します

おすすめ

転載: www.cnblogs.com/jxd283465/p/11645752.html