序文
現在のデータベースがあります。mysql
によるMySQLとOracleは、直接シーケンスをサポートしていませんが、同じではありませんので、あなたは根拠のSQL文で機能のシーケンスをシミュレートするために、テーブルを作成する必要があり、次のとおりです。
ステップ
1.シーケンステーブルを作成します。
CREATE TABLE `sequence`( ` NAME` VARCHAR(50)utf8_bin COLLATE NOT NULL COMMENT ' 名前配列' 、 `current_value`のINT(11)NOT NULL COMMENT ' シーケンスの現在の値' 、 'increment`のINT(11)NOT 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 VARCHAR(50 )) 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 VARCHAR(50 )) 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 VARCHAR(50)、値の整数) RETURNS INTEGER LANGUAGE SQL DETERMINISTICは CONTAINS SQL SQL SECURITYのDEFINERの コメント'' BEGIN UPDATE シーケンス SETの現在の値= 値 名= SEQ_NAMEを。 返りCURRVAL(SEQ_NAME)。 ENDの $ DELIMITER;
データベースの構造
コール
INSERT INTOの配列VALUES(「testSeq 」、0、1); - 配列名と初期値を加算し、そして増加から SELECT SETVAL(「testSeq 」、10); - の指定されたシーケンスの初期値を設定する SELECT(CURRVAL ' testSeq 「 ;)- のクエリー配列指定された電流値 SELECT NEXTVAL(」testSeq '); - クエリー配列は、次の値を指定します