• ベストアンサー

MySQLの連番扱い

アクセス2000では、オートカウントという型が存在するので、 特に意識しなくてもレコードを作成するとカウントされますが MySQLやPostgreSQLでは連番というフィールドを設けた場合、 どのように連番をつけているのでしょうか? 例えば、連番のフィールド名をserialという名前にした場合、 連番のフィールドに値をセットする前に、select max(serial)+1 from table_sample; のように連番の値を求めるのでしょうか?

  • MySQL
  • 回答数1
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
noname#227796
noname#227796
回答No.1

PostgreSQLではserial、MySQLの場合はAUTO_INCREMENTです。 ↓の「順序作成」というところを参照してください。 http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/psql_k04.htm http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/mysql_06.htm MySQLなら↓ここも。 http://dev.mysql.com/doc/mysql/ja/example-AUTO_INCREMENT.html 細かい使い方などは、ネット上にごろごろしていますので、「PostreSQl serial」「MySQL AUTO_SEQUENCE」などをキーワードに検索してみましょう。 連番に限ったことではありませんが、バージョンによって仕様が変わる場合も考えられますので、ご注意を。

関連するQ&A

  • 連番の質問

    こんにちは MYSQLの勉強始めたばかりなのですけど、よろしくお願いします。 このように連番を作ったのですが、 alter table xxx add renban int; alter table xxx add index index1(renban); alter table xxx modify renban int auto_increment; 順調にできたのですが、#9と#10の二つのフィールドを消去したところで、次の番号が9からではなく、 11からになってしまったのです。 そこで、index1の消去して、新しい連番を作るのに、どうすればいいのか、教えてください。 それとも、次の番号が11ではなく、9になるように、どうすればいいのか、お願いできますか? お願いします。

  • MySQL 複合検索条件

    MySQLでひとつのテーブルの複数フィールドに値を設定してレコードを参照したい。 例えば、key-field-1 >= ??? と key-field-2 >= ???で key-field-1は主キーでkey-field-2は従属キーとし、key-field-1の条件に合うレコードで、次にkey-field-2の条件に合うレコードを見つけ、それ以降の全てのレコードを抽出したい。 select * from table-1 where key-field-1 >= ??? and key-field-2 >= ??? で検索すると 両方の条件を満たすレコードのみ検索される。 アドバイスを待っています。

  • mysqlでオートナンバーにするには?

    OSはRedhatLinux7.1 Apache_1.3.26 php-4.2.3 mysql-3.23.52 を使っています。 mysqlでデータ型をオートナンバー型にしたいのですが、何と指定すればいいのですか? postgreSQLではserialと指定するようなのですが。。。 auto_increment?ってゆーのでやってみたのですがエラーになってしまい先に進めません。 アドバイスお願いします。

  • MySQLのINSERT時にたまに重複になる

    下記の通り同じデータが無かった場合に限りインサートしています。 //同じデータが既にあるか確認 $sql = "select * from `reg_data` where "; $sql .= "`Date` = '".$date."' and "; $sql .= "`ID` = '".$id."' and "; $sql .= "`No` = '".$no."'"; $result = mysql_query($sql); $rows = mysql_num_rows($result); //データが0なら今日のレコード作成 if($rows == 0){ $sql = "insert into `reg_data` values('0', '".$date."', '".$id."', '".$no.")"; mysql_query($sql); } しかし、3%ぐらいの確立で重複インサートになってしまいます。 重複といっても 1個目のフィールドはAUTO_INCREMENTになっておりまして AUTO_INCREMENTの値が重複する事は無いです。 $date、$id、$noがまったく同じテーブルがいくつか重複した場合でも AUTO_INCREMENTの値は全て連番になっています。 重複インサートが発生しないよう改善するには どうしたら良いでしょうか。 日付を2フィールド目に書いているので 0時0分1秒辺りでインサートが集中してしまいます。 分散させられたら改善するような気がしますが いい案が思いつきません。 宜しくお願い致します。

    • ベストアンサー
    • PHP
  • MySQLで一番最後のレコードをしる関数って?

    MySQLで一番最後のレコードを知る関数ってありますか? noや時間情報のソートの最初の値ではなく、簡単に最後に追加したレコードを取得する方法。 ないなら、方法としてはレコード数をカウントして、全カウント数番目をselectすればいいんでしょうか? SQLには、最後とかの概念がないかな?

    • ベストアンサー
    • MySQL
  • MySQLのエラー出力

    MySQLで、テーブルのnumberフィールドのレコードでidフィールドのレコードとpwフィールドのレコードを取り出すことをしています。 $sql = mysql_connect('mysql.example.com', 'user', 'pass'); mysql_select_db('exampledb'); $result = mysql_query("SELECT * FROM `memberlist` WHERE `number` = '{$number}'"); while ($row = mysql_fetch_object($result)){ echo "ID:{$row->id}"; echo "PW:{$row->pw}"; } +------+------+------+ |number|id----|pw----| +------+------+------+ |000001|userid|userpw| +------+------+------+ この場合、$numberに000001を代入することで object(stdClass)#1 (3) { ["number"]=> string(6) "000001" ["id"]=> string(6) "userid" ["pw"]=> string(6) "userpw" } となりますが、 これが、もし$numberにnumberフィールドのレコードに無い値が代入された場合、どうやってエラーを出せばいいのですか?

    • ベストアンサー
    • PHP
  • ACCESSでの連番作成

    ACCESSにおいて、あるテーブルのフィールド1に1001、1003と2つのレコードが入っています。フィールド2にははじめは何も値は入っていません。 フィールド1 フィールド2 1001 1003 となりのフィールド2にフィールド1の値1つに対して100個の連番を 作成したいのですが、どのような方法が考えられますでしょうか? フィールド1 フィールド2 1001     100100 1001     100101 1001     100102 …      … 1001     100199 1003     100300 1003     100301 1003     100302 …      … 何分初心者なもので、おわかりの方がいらっしゃいましたらぜひご教授お願い致します。

  • ExcelVBAでMySQLのAUTO_INCREMETを

    まず、MySQLで作ったデータベースにAUTO_INCREMETに設定したフィールドがあります。 そして、ExcelVBAのADOで新しいレコードを追加した直後にそのフィールドの値 を取得しようとしています。 レコードセット.addNew レコードセット.update レコードセット.MoveLast としても、取得できるのは更新前の値です。 開くときはadOpenDynamic, adLockOptimisticにしているのですが、 他に何か問題があるのでしょうか? ちなみに、一旦closeした後は新しい値が取得できます。

    • ベストアンサー
    • MySQL
  • Accessのオートナンバーに近い事をやりたい

    Accessのフィールドの型の中にオートナンバー型という、自動で連番になる型があります。 SQL Serverにはそういった型がないため、自分でナンバーを付与していくスクリプトを組まなくてはいけないと思います。 一番簡単な方法は、連番になっているフィールドを降順で並び替え、一番最初のレコードに1を足してあげれば連番になるのですが、Webで注文を受けるようなシステムの場合、タイミングによっては同じ番号を割り当てられてしまう可能性があります。 同じ番号がわりあてられずに連番で番号を付与していくには、どういうやり方があるのでしょうか?

  • 連番を振る インデックス 付加 理由

    こんにちは、 MYSQLの学習を始めた者です。(学習書籍:MySql 入門以前) レコードに連番を振る際に自動連番属性を持たせるためにはテーブルに対してインデックスを付加しないといけないと本に書いてありました。 例)alter table todofuken add index ind1(renban); 何となくは分かるのですが、すっきりしません。 何かこのあたりの事を分かりやすく教えていただけないでしょうか? よろしく御願いします。

    • ベストアンサー
    • MySQL