MySQLシーケンス使用

10866 ワード

MySQLシーケンス使用
MySQLシーケンスは整数のセットです.1、2、3、…データテーブルは1つのフィールドでのみメインキーを追加できます.他のフィールドも自動的に増加することができれば、MySQLシーケンスを使用して実現できます.
この章ではMySQLの使用方法を紹介します.
AUTO_を使うINCREMENT
MySQLの中で一番簡単にシーケンスを使う方法はMySQL AUTO_を使うことです.INCREMENTは列を定義します.
実例
以下の例では、データテーブルinsectが作成され、insectテーブルのidは、指定された値なしに自動的に増加することができる.
mysql> CREATE TABLE insect
    -> ( -> id INT UNSIGNED NOT NULL AUTO_INCREMENT, -> PRIMARY KEY (id), -> name VARCHAR(30) NOT NULL, # type of insect -> date DATE NOT NULL, # date collected -> origin VARCHAR(30) NOT NULL # where collected ); Query OK, 0 rows affected (0.02 sec) mysql> INSERT INTO insect (id,name,date,origin) VALUES -> (NULL,'housefly','2001-09-10','kitchen'), -> (NULL,'millipede','2001-09-10','driveway'), -> (NULL,'grasshopper','2001-09-10','front yard'); Query OK, 3 rows affected (0.02 sec) Records: 3 Duplicates: 0 Warnings: 0 mysql> SELECT * FROM insect ORDER BY id; +----+-------------+------------+------------+ | id | name | date | origin | +----+-------------+------------+------------+ | 1 | housefly | 2001-09-10 | kitchen | | 2 | millipede | 2001-09-10 | driveway | | 3 | grasshopper | 2001-09-10 | front yard | +----+-------------+------------+------------+ 3 rows in set (0.00 sec)

シーケンスをリセット
データテーブルの複数のレコードを削除したら、残りのデータのAUTO_を希望します.INCREMENT列を並べ直したら、自増の列を削除して再追加することで実現できます.しかし、この操作は非常に注意してください.削除と同時に新たな記録が追加されたら、データが混乱する恐れがあります.操作は以下の通りです.
mysql> ALTER TABLE insect DROP id;
mysql> ALTER TABLE insect -> ADD id INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST, -> ADD PRIMARY KEY (id);
シーケンスの開始値を設定します.
一般的にはシーケンスの開始値は1ですが、もし開始値100を指定する必要があるなら、次のような文言で実現できます.
mysql> CREATE TABLE insect
    -> ( -> id INT UNSIGNED NOT NULL AUTO_INCREMENT, -> PRIMARY KEY (id), -> name VARCHAR(30) NOT NULL, -> date DATE NOT NULL, -> origin VARCHAR(30) NOT NULL )engine=innodb auto_increment=100 charset=utf8;
または、表の作成に成功した後、以下の語句でも実行できます.
mysql> ALTER TABLE t AUTO_INCREMENT = 100;


関数を使って自己増加シーケンス管理テーブルを作成します.
第一歩:Sequence管理表sequenceを作成する
DROP TABLE IF EXISTS sequence;CREATE TABLE sequence(name VRCHAR(50)NOT NULL、current___INT_NULL、increment_INT_NULL_DEFAULT 1、PRIMARY KEY_ENGINE=InnoDB;ステップ2:現在の値を取る関数を作成します.
DROP FUNTION IF EXISTS currval;CREATE FNCTION currval RETURNS INTEGERL ANGUAGE SQL DETERMISTIC CONTAINS SQL SQL SECURITY DEFINER COMMENT'BEGINDECLARE value INTER;SET value=0SELECT current_value INTO value FROM sequenceWHERE name=seq_nameRETURN valueEND$DELIMITER;ステップ3:次の値を取る関数nextvalを作成します.
DROP FUNTION IF EXISTS nextval;DELIMITER$CREATE FUCTION nextval RETURNS INTEGERL ANGUAGE SQL DETERMINISTIC CONTAINS SQL SQL SECURITY DEFINER COMMENT''BEGINUPS DATE sequence SETER cuntuvalue=current_value+increment WHERE name=seq_nameRETURRN currval(seq name);END$DELIMITER;ステップ4:現在の値を更新する関数setvalを作成します.
DROP FUNTION IF EXISTS setval;DELIMITER$CREATE FUCTION setval RETURNS INTEGER(50)、value INTEGER)RETURNS INTEGERL ANGUAGE SQL DETERMINISTIC CONTAINS SQL SQL SECURITY DEFINER COMMENT'BEGINUPDATE sequent Securrentvalue=value WHERE name=seq_nameRETURRN currval(seq name);END$DELIMITER;テスト関数機能
上記の4ステップが完了すると、作成したいsequence名を以下のデータで設定し、初期値を設定し、現在値と次の値を取得することができます.
INSERT INTO sequence VALES('TestSeq',0,1);----Sequenceの名前と初期値を追加し、TestSeqという自己増加シーケンスを追加します.
SELECT SETVAL('TestSeq',10)-----Sequenceを指定する初期値を設定します.ここでTestSeqの初期値を10に設定します.
SELECT CURRVAL('TestSeq'),--クエリ指定Sequenceの現在の値は、ここでTestSeqの現在の値を取得します.
SELECT NEXTVAL('TestSeq'),--クエリー指定Sequenceの次の値はここでTestSeqの次の値を取得します.
転載先:https://www.cnblogs.com/scwbky/p/9837668.html