• ベストアンサー
  • すぐに回答を!

auto_incrementを使ってIDを生成するには

auto_incrementを使用してIDを作成したいのですがいまいちよく分かりません。 行いたいことは たとえばテーブルにid name textというカラムがあります。idカラムにauto_incrementを使用してIDである数字を生成したいのですが、nameカラムにある値ごとにIDを作成したいと思っています。 分かりにくいと思いましが以下のような感じです。 +----+-------+ | id | name | +----+-------+ | 1 | goo | | 1 | yahoo | | 2 | goo | | 1 | google| | 2 | yahoo | | 3 | goo | | 2 | google| +----+-------+ のようにnameの値ごとに生成したいと思っています。 このようなカラムを作成するSQLをお願いいたします。

共感・応援の気持ちを伝えよう!

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

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

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

他人を「マニュアル代わり」にするのは、やめませんか? 「3.6.9. AUTO_INCREMENT の使用」に、例題入りで解説されています。 以下のように、AUTO_INCREMENTの列をキーの2番目の構成列とすれば、先頭構成列毎の番号になります。 MyISAMテーブルかDBDテーブルにする必要があり、CREATE TABLEの構文では「TYPE=MYISAM」となっていましたが、Ver 5.0では警告メッセージが出るようで、「ENGINE=MYISAM」とすれば警告も出なくなりました。 CREATE TABLE animals ( grp char(10) NOT NULL, id MEDIUMINT NOT NULL AUTO_INCREMENT, name CHAR(30) NOT NULL, PRIMARY KEY (grp,id) ) ENGINE=MYISAM;

参考URL:
http://dev.mysql.com/doc/refman/4.1/ja/example-auto-increment.html

共感・感謝の気持ちを伝えよう!

質問者からのお礼

>他人を「マニュアル代わり」にするのは、やめませんか? すいません、このようなサイトがあったこと知らず調べずに聞くという行動に走ってしまいました。すいません。 回答ありがとうございました。

関連するQ&A

  • オートインクリメントについて

    カラムはidとnameです AUTO_INCREMENTをidにつけました googleで検索したら、「AUTO_INCREMENTをつけた場合はindexをつけなくてはいけない」 と書いてあったのですが、なぜindexをつけないといけないのでしょうか?indexなしだとよくないですか? 今あるidのカラムにsqlでindexを付けることはできますか? よろしくお願いします

    • ベストアンサー
    • MySQL
  • SQLite(3.2.2)でauto_increment

    今、SQLiteを利用してつまづいています。 バージョンは3.2.2です。(Linux) MySQL、PostgreSQLの知識はあります。 プライマリーキー(id)にシリアルを作成しようと思い、http://cl.pocari.org/2006-02-12-1.html を参考にしながらテーブルを作りました。 CREATE TABLE bbs ( id INTEGER UNSIGNED NOT NULL PRIMARY KEY, name VARCHAR(255) NOT NULL, message TEXT NOT NULL, last_update TIMESTAMP NOT NULL ); このbbsテーブルに対し、 INSERT INTO bbs (name,message,last_update) VALUES ('name','message','2008-04-03 12:11:00'); というクエリを発行すると 「SQL error: bbs.id may not be NULL」 とういエラーが返ってきます。 確かに、bbsテーブルのidカラムは「NOT NULL」制約があるのでエラーが正しいとは思うのですが、参考URLのauto_incrementの作成方法には、auto_incrementにしたいカラムをPRIMARY KEYでやればできる、のような事が書いてあったので、よく分かりません。 バージョンの問題なのか、クエリに誤りがあるのか分かる方おられましたら解答お願いします。 また、auto_incrementなカラムの作成方法も一緒に教えていただけたら幸いです。 宜しくお願いします。

  • AUTO_INCREMENTの扱いについて

    MySQL 5.6を使用しています。 ユーザーテーブルがあるとします。 ユーザーテーブルにある「ユーザーID」はinsert時にAUTO_INCREMENTで自動採番されます。 ユーザーテーブルの別のカラムで「作成ユーザID」というカラムがあります。insertしたユーザーのユーザーIDを保持するカラムです。 すでにユーザーテーブルにいるユーザー(管理者)がinsertした場合はいいのですが、 自信で自分のユーザーを登録できる機能もあります。 その場合、まだ作成されてないユーザID(AUTO_INCREMENTで自動採番されるユーザーID)をどうやって参照したらいいでしょうか?

    • ベストアンサー
    • MySQL
  • AUTO_INCREMENTを2つ設定する方法

    お世話になっております。 現在すでに投稿されている記事を複製する処理をphpで作成しています。 linkmetaというテーブル内のid、link_idというカラムがありidはAUTO_INCREMENTとなっています。 link_idにもAUTO_INCREMENTを設定したいのですが調べるとそれは仕様により不可能ということがわかりました。 現在link_idにもidと同じ値を自動的に挿入したいと考えております。 別の手段でlink_idにAUTO_INCREMENTもしくは同様のINSERTを行う方法はありませんでしょうか? idの数値を取得しようと考えたのですが INSERT前ではAUTO_INCREMENT後の値は取得できない事に後から気づきました。 この様に1つのテーブルに値が重複しない様にする処理は皆様はどのように行なっているのでしょうか? 良い方法は思いつかずに困っております。 どなたかご回答くださいませ。 宜しくお願い致します。

    • ベストアンサー
    • PHP
  • 各値に自動的に数字を入力させるには?

    テーブル HOGE に id、name、number、hatenaというカラムがあります。 質問はnameに値が入れば自動的に1からの数字を id に入力できないでしょうか? auto_incrementを使用すれば可能なのですが、行いたいことはnameに入る各値ごとに入力することです。 例えばnameにgoogleが入れば1を、yahooが入れば1を、又googleが入れば2を、 msnが入れば1をといった感じに値ごとに数字をつけていくものです。 又、nameに入る値は不明で何が入ってくるかは分かりません。ただ同一なものであれば以前の数字に1を足しidに入力させるものです。 どうぞよろしくお願いいたします。

    • ベストアンサー
    • MySQL
  • AUTO_INCREMENT を複数のテーブルに跨がす事って可能でしょうか?

    PHP+MySQLで AUTO_INCREMENTを使用してidを管理したいんですが 複数テーブル(test1,test2)に 同じ「tourokou_id」というカラムが あります。 両方のtourokou_idをAUTO_INCREMENTすると test1 1 2 3 4  ・・・・・ test2 1 2 3 4  ・・・・・ となってしまいますよね。 これを test1 1 3 4   ・・・・・ test2 2   5 ・・・・・ という風にしたいんですがどのようにすればいいんでしょうか? そもそもできるんでしょうか?

    • ベストアンサー
    • MySQL
  • mysqlで部分的にオートインクリメントしたい

    mysqlを使用しております。 下記のようなテーブルを作りたいと思っているのですが、 親通し番号が同じ行についてのみ1からオートインクリメントすることは出来るのでしょうか? どなたかアドバイス頂ければと思います。 -------------------------------------------------------------------------------------- column1:親番号 column2:子通し番号   ・   ・   ・ column1:1 column2:1 ←カラム1が同じ値のとき、カラム2はinsertされた順に増えていく column1:1 column2:2 column1:1 column2:3 column1:2 column2:1 ←カラム1が増えたとき、カラム2は1に戻りインクリメントされていく。 column1:2 column2:2 column1:2 column2:3

    • ベストアンサー
    • MySQL
  • AUTO_INCREMENTのフィールドにインポートするには?

    データの入っていないテーブルにphpmyadminからテキストファイルをインポートしようとしています。 下記のようなinsert文が3000行ぐらいあります。 INSERT INTO `table` (`id`, `name`, `yomi`) VALUES (■,阿部,あべ); 上記のidフォールドにAUTO_INCREMENTが設定されています。 ■にはどのような値をいれればいいのでしょうか? 試しに連番で数字を振ってみたのですがエラーになってしまいました。

    • ベストアンサー
    • MySQL
  • AUTO_INCREMENTについて教えてください

    ■質問1 PHPを使ってMySQLに接続しているのですが、 「AUTO_INCREMENT」指定しているIDの次の値を取得したいのですが、 どうすれば良いでしょうか? 用途としては、レコードを挿入する際、画像ファイルにレコードID名を付与したパスをつけたいのです。 <やりたいこと> 1.AUTO_INCREMENT指定しているIDの次の値を取得 2.画像ファイル名に付与 3.レコード挿入 この1を、どうやるか知りたいです ■質問2 「AUTO_INCREMENT」指定はどこに保存されているのでしょうか? 例えばレコードを削除した後、新たにデータ挿入する場合、 次の「AUTO_INCREMENT」値ではなく、削除した一番若い番号を利用することは可能でしょうか? ■質問3 質問2に関連しているのですが、DUMPデータを移行した際など、次の「AUTO_INCREMENT」値も新しいDBへ引き継がれるのでしょうか?

    • ベストアンサー
    • MySQL
  • auto_incrementの値の取りだし方

    またまたお世話になります。 いつも秒殺質問ばかりしているnak205です。 いまPHPとMySQLでフォームから受付を行い、auto_incrementで発行した受付番号を受付完了画面に表示させるようなものを使っています。 そこで困っているのが、MySQLにデータをINSERTしたあと、どうやって正確にインクリメントされたばかりの受付番号を得ればいいかというところです。 データをINSERTしたあと、受付番号を得るSQLを発行してる間に他の受付が入ってしまえば数字がずれてしまいますよね。INSERTと同時にauto_incrementで出来た数字の値を得る関数がPHPかMySQL側にありますか? 受付番号だけ別テーブルに置いてauto_incrementではなく、PHPで管理したほうが良いんでしょうか?

    • ベストアンサー
    • PHP