MySQLでシーケンスを作成するにはどうすればよいですか?
MySQLでシーケンスを作成しようとしています(SQL全体の経験は浅いです)。以下のコードを使用していますが、エラーが発生します。
CREATE SEQUENCE ORDID INCREMENT BY 1 START WITH 622;
ORDIDは私が使用しているテーブルのフィールドを参照しています。どうすれば適切にシーケンスを作成できますか?
Edit:
聞くところによると、MySQLはシーケンスを使用していないとのこと。現在、以下のコードを使用していますが、これもエラーを引き起こしています。どうすれば直るのでしょうか?
CREATE TABLE ORD (
ORDID NUMERIC(4) NOT NULL AUTO_INCREMENT START WITH 622,
//Rest of table code
Edit:
修正方法を見つけたようです。私が使用していた)phpMyAdminでは、以下のコードを使用できます。
ALTER TABLE ORD AUTO_INCREMENT = 622;
なぜこのようなコードを好むのかはわかりませんが、もし他の人がこの件で助けを必要としているならば、どうぞ。)
21
3
これは[MySQlのマニュアルで提案されている]解決策です1。
LAST_INSERT_ID()の引数にexprが与えられた場合、引数の値が関数から返され、次のIDとして記憶されます。 引数の値は関数から返され、次の LAST_INSERT_ID()で返される次の値として記憶されます。これは、次のようなシミュレーションに使用できます。 シーケンスのシミュレーションに使用できます。
この記事]1をご覧ください。 お望みのものが得られると思います。 テーブルが既に存在し、データが入っている場合、エラーが発生するのは、auto_incrementが他のレコードに既に存在する値を割り当てようとしていることが原因かもしれません。
つまり、他の方のコメントにもあるように、Oracleで考えられているシーケンスは、MySQLには存在しません。 しかし、auto_incrementを使用して希望することを実現できる可能性があります。
具体的なエラーの詳細がわからなければ、より具体的なヘルプを提供することは困難です。
更新情報 (英語)
auto_incrementの使い方については、このリンクも参考になります。 AUTO_INCREMENTの値を設定することは、[テーブルのオプション][3]であり、特にカラムの属性として指定されるものではないようです。
また、上記のリンクの1つによると、テーブルに変更を加えることで、自動増分の開始値を設定することもできます。
アップデイト2。 自動増分を使用したsqlfiddleの動作例へのリンクを示します。
この情報がお役に立てれば幸いです。
[3]: http://dev.mysql.com/doc/refman/5.0/en/create-table.html
インクリメントテーブルを作成する際には、挿入された行を削除しないように注意する必要があります。その理由は、IDを含む大量のダムデータをデータベースに保存しないためです。そうしないと、ドキュメント http://dev.mysql.com/doc/refman/5.0/en/innodb-auto-increment-handling.html にあるように、mysql が再起動した場合、既存の最大行を取得し、その時点からインクリメントを続けることになります。