• ベストアンサー
  • 暇なときにでも

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

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

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

  • MySQL
  • 回答数2
  • 閲覧数118
  • ありがとう数2

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

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

mysql の場合、auto_increment 属性を付けたら、何らかのindexも設定しないとエラーになるので、create table 出来てるのなら、primary key とか付けているのでは?phpmyadmin で作成したのなら自動付加してくれてるのでしょう。 index必要性について マニュアル参照 http://dev.mysql.com/doc/refman/5.1/ja/create-table.html コマンドラインクライアントでチェックするなら、show構文で show create table `tbl_name`;

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

質問者からのお礼

お答えいただきありがとうございます primary keyはidにつけてありました primary keyを付けるとindexも設定していることになるのですか? db始めてなので不安になってしまってひつこくてすいません >show create table `tbl_name`; 便利ですね!さっそくつかってみました、しかし。indexらしきものがないです CREATE TABLE `table` ( `id` mediumint(9) NOT NULL AUTO_INCREMENT, `name` char(20) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=utf8

その他の回答 (1)

  • 回答No.1
  • yambejp
  • ベストアンサー率51% (3827/7415)

>AUTO_INCREMENTをつけた場合はindexをつけなくてはいけない 微妙な表現ですね AUTO_INCREMENT属性がつくのはユニーク属性をもったintのカラムです。 ユニーク属性自体にインデックスが設定されるので、 AUTO_INCREMENTを設定しているのであれば逆に必ずインデックスされていると 考えてよいと思います

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

質問者からのお礼

お答えいただきありがとうございます >AUTO_INCREMENTを設定しているのであれば逆に必ずインデックスされていると 考えてよいと思います とゆうことは、インデックスはすでに付いているとゆうことですか? phpMyAdminで確認できればよかったんですが、indexらしきものが見当たらなかったので

関連するQ&A

  • 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
  • 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に0はダメ?

    「INT」でかつ「AUTO_INCREMENT」のカラムに0をINSERTしようとするとうまくいかないのですが、 「AUTO_INCREMENT」では0はダメなのでしょうか? それとも「INT」だから?

    • ベストアンサー
    • MySQL
  • MySQLでのレコード移動(オートインクリメント)

    MySQL 5.1 (win)で以下の流れで「オートインクリメントをリセット後」、レコード移動したいです。 ※idはauto_incrementしています。 1.既存のレコード一覧からレコード2を削除 id name comment 1 tanaka こんにちは ※削除 3 suzuki こんにちは 4 nakamura こんにちは  5 kimura こんにちは 2.この後、idのAUTO_INCREMENTを「1」にリセット。 3.新規レコードを追加 id name comment 1 tanaka こんにちは 3 suzuki こんにちは 4 nakamura こんにちは  5 kimura こんにちは 2 sato こんにちは ←idが空き番の2から始まり、このようにレコードが最後に追加されますよね? この後これをレコード1とレコード3の間に移動させたいのですがそんなSQL文はありますか? ***最終結果*** id name comment 1 tanaka こんにちは 2 sato こんにちは ←ココに移動 3 suzuki こんにちは 4 nakamura こんにちは  5 kimura こんにちは よろしくお願いします

    • ベストアンサー
    • 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
  • MySQLのauto incrementについて

    宜しくお願い致します。 MySQLでカラムにauto incrementの属性を付けたいのですが、primary_keyに指定せずにauto increment属性をつける方法はないのでしょうか?

    • ベストアンサー
    • 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
  • 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
  • auto_increment型

    phpPgAdmin上から、テーブル定義を行っています。 テーブルの中へ、auto_increment型の項目を追加したいと 考えております。 MySQLには、auto_increment型が存在しますが、PostgreSQLの場合 には、同じような型があるのでしょうか?もし、ない場合には、 一般的にどのような対応をしているのでしょうか?(例えば、 Insertする際にPGの中でincrementしているのでしょうか?) (1)auto_increment型の追加方法 (2)auto_increment型がない場合の、対処方法 以上の点に関して、お分かりになる方がいらっしゃいましたら、 ご教示をお願いいたします。