• 締切済み

連番の質問

こんにちは 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
  • 回答数3
  • ありがとう数2

みんなの回答

  • nora1962
  • ベストアンサー率60% (431/717)
回答No.3

回答が重複するかもしれませんが、少なくともinnodbなら alter table <tablename> auto_increment=<value>; で可能です。

  • bobviv
  • ベストアンサー率50% (13/26)
回答No.2

 お使いのテーブルがMyISAMタイプだという前提で書きます。(I assume that your table is 'MyISAM' type.)  auto_increment値をリセットしたいということでしたら、テーブルのタイプをInnoDBに変更してMySQLを再起動してみてください。その後またテーブルタイプを'MyISAM'に戻します。(If you want to reset the current value of auto_increment, change table type to 'InnoDB' and reboot MySQL.Then change back to 'MyISAM'.)    alter table xxx type=innodb  [reboot mysql]  alter table xxx tayp=myisam    ほかには、コマンドから(Another way is to type command like this...)  myisamchk -A xxx or  myisamchk --set-auto-increment[=value] xxx  という手もあります。私が以前試した環境ではこれはうまくいきませんでしたが。(Although this way didn't work well in my case.)  インデックスの指定もされているようですが、auto_incrementの問題とは関係ないでしょう。(Your query specifies the index for a table. But I think indexing does not have nothing to do with resetting the current value of auto_increment.) メーリングリスト等も参照してください。(Also refer to mailing lists etc.)

参考URL:
http://dev.mysql.com/doc/refman/5.0/en/innodb-auto-increment-column.html
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

常に連番というのは不可能ではないでしょうけど やる意味がないので、いかがなものかと思います。 特にインクリメントってユニークなIDを発行している だけで別に連番機能というわけでもないでしょう。 RDBですからそのIDをキーに他のテーブルとの すり合せにつかったりするわけで、9番を消して、 あらたなわけのわからんデータが9番にきて しまったら、整合性がなくなりますから。 また連番といってもソートは任意のフィールド をつかうので、連番の意味がありません。 連番をつかってソートするくらいなら 更新日時をフィールドにうめむか更新順テーブル をもってください。

nonofu
質問者

お礼

ごめんなさい。意味がよくわかりません。 一点だけ直さないといけないのは、#9と#10のことは、フィールドのことではなく、レコードのことです。 連番は参考のためにつくったフィールドです。 あらためて質問するのならば、連番index1を作った後に、どうやってそのindex1を消去すればいいのか (もう一度新しい連番作るために)、教えてください。 日本人ではないので、回答の意味が全部理解できませんでした。ごめんなさい。ありがとうございました。お願いします。

関連するQ&A

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

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

    • ベストアンサー
    • MySQL
  • 複数のindexについて

    CREATE TABLE `test` ( `id` INT(8) , `num` INT(8) , 他多数 (省略) ) このようなテーブルがある場合、以下の2種類のインデックスのつけ方にどのような違いがあるのでしょうか? phpmyadminで確認すると、(1)はインデックスが合体しており、(2)はインデックスが個別に分かれています。 (1) ALTER TABLE `test` ADD INDEX ( `id` , `num` ) (2) ALTER TABLE `test` ADD INDEX ( `id` )   ALTER TABLE `test` ADD INDEX ( `num` ) ちなみに、以下のようなSELECT文を用いる場合には、どちらのインデックスが適していますか? SELECT * FROM test WHERE id='●' and num > '△' ( mysql5,MyISAM )

    • ベストアンサー
    • MySQL
  • MYSQLのフィールドにユニークキーを設定する。

    すでに作ってしまったテーブルにユニークキーを付けたいと考えています。最悪の場合、新しくカラムを作っての追加でもかまわないのですが、いろいろ試してもエラーが返されてしまいます。 codeというカラムにユニークキーを設定したいのですが、 alter table テーブル名 modify unique code; alter table テーブル名 add unique code2; alter table テーブル名 modify code unique; alter table テーブル名 add code2 unique; alter table テーブル名 modify code test unique; alter table テーブル名 add code2 test unique; alter table テーブル名 modify unique code test; alter table テーブル名 add unique code2 test; alter table テーブル名 modify (code unique); alter table テーブル名 add (code2 unique); alter table テーブル名 modify (code text unique); alter table テーブル名 add (code2 text unique); など、思いつく限り試し、グーグルで調べる限り調べたのですが、出てきたものをためしてもダメでした。 テーブルを作成した後、カラムにユニークキーを設定した経験のある方、どのように変更をしたのでしょうか?

    • ベストアンサー
    • MySQL
  • 予約語のgroup

    groupは予約語のためカラム名には使えないはずですが、alter文だと作れてしまうのはmysqlのバグですか? ALTER TABLE `hoge` ADD `group` INT NOT NULL ;

    • ベストアンサー
    • MySQL
  • mysqlで外部キーをつけたカラムの名前変更方法

    mysqlで外部キーをつけた列の名前を alter table tablename change oldname newname int; で変更しようとすると、エラーがでます。 1025の150でrenameのエラーでSHOW INNODB STATUSをみると、indexが無いかデータ型が違うということでした。データ型は確認しています。 indexを名前変更と同時に作ることはできるんでしょうか?change~の後にadd indexではエラーが出ました。

  • 【PHP,MySQL】連番の付け方について

    連番を下記の様に付けたいのですが、どなたかご教授ください。 参考になるURLでも結構です。 【環境】 ・MySQL バージョン: 5.1.41 ・PHP バージョン: 5.3.1 【現状】 ○親テーブル:nou_itiran ・entry_id [int(11)][auto_increment]主 ・その他カラム ○子テーブル:nou_ko ・ko_id [int(11)][auto_increment]主 ・entry_id [int(11)]←親テーブルの主キー値が入る ・その他カラム 2つのテーブルを作成しています。 親テーブルのカラム[entry_id]に対して、子テーブルの[ko_id]に 副番号をつけたいのですが、考え方がまとまりません。 現在は、 [親entry_id]/[子ko_id] 456/1 456/2 457/3 457/4 458/5 458/6 459/7 ・ ・ のように、[親entry_id]と[子ko_id]は個々に連番が発生します。 *********** 【達成したい内容】 456/1 456/2----★ 457/1 457/2----★ 458/1 458/2 459/3----★ [親entry_id]に対して、何番まで使われたか(★)を他のテーブルで 保持しておけばよいのかも??と思うのですが、 具体的な手法がわかりません。 ************* MySQLへのセレクト、インサートはPHPから行っております。 宜しくお願いいたします。

    • ベストアンサー
    • MySQL
  • MySQLで、テーブル内のフィールドの名前を変えたいのですが・・・

    MySQL4.0.20 Linuxを使っています。 テーブル内のフィールドの名前を変えたいのですが、alter table の modifyはカラムの属性を変えるもので、名前を変えるのは運用途中でできるのかなと、ふと疑問に思いました。 alter tableなどでできるのでしょうか? 結局サーバーを止めて、バックアップし、テーブル定義を書き直して、リストアするしか無いのでしょうか?

    • ベストアンサー
    • MySQL
  • FOREIGN KEYの追加について。

    FOREIGN KEYの追加について。 MySQL5.1.37 CREATE TABLE `goods` ( `id` int NOT NULL AUTO_INCREMENT, `num` int NOT NULL DEFAULT '1', PRIMARY KEY (`id`), index (`num`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE `sales` ( `id` int NOT NULL AUTO_INCREMENT, `num` int NOT NULL DEFAULT '1', PRIMARY KEY (`id`), index (`num`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 上記のようなテーブルを作り、salesテーブルにCSVファイルからデータをインポートしたのち、FOREIGN KEYを子テーブルに追加したいのですが、下記のようなエラーになります。 ALTER TABLE `sales` ADD FOREIGN KEY ( `num` ) REFERENCES `test`.`goods` ( `num` ) ON UPDATE CASCADE ; MySQLのメッセージ: ドキュメント #1452 - Cannot add or update a child row: a foreign key constraint fails (`test`.`#sql-561_cf`, CONSTRAINT `#sql-561_cf_ibfk_1` FOREIGN KEY (`num`) REFERENCES `goods` (`num`) ON UPDATE CASCADE) データをインポートしたのちにFOREIGN KEYを追加するにはどのようにしたらいいのでしょうか?

  • MySQLのKey属性「MUL」について

    宜しくお願い致します。 先程気付いたのですが、MySQLのKey属性に「MUL」という指定が入っていました。こんな指定をした覚えが全く無いので、消そうと思い、alter table modify でカラムの属性を変更させてもやっぱり消えないのですが、これはなんなんでしょう?

    • ベストアンサー
    • MySQL
  • MySQL データベースを選択したい

    こんにちは。 SQLの初歩的な操作で躓いています。 MySQL 3.23.51-nt (WondowsXP) を使用しています。 PHPベースの掲示板を作成していまして、次の一連の作業をしたいのですが、 ALTER TABLE phpbb_categories ADD cat_main_type CHAR(1); ALTER TABLE phpbb_categories ADD cat_main MEDIUMINT(8) UNSIGNED DEFAULT '0' NOT NULL; ALTER TABLE phpbb_categories ADD cat_desc TEXT NOT NULL; ALTER TABLE phpbb_forums ADD forum_link VARCHAR(255); ALTER TABLE phpbb_forums ADD forum_link_internal TINYINT(1) NOT NULL; ALTER TABLE phpbb_forums ADD forum_link_hit_count TINYINT(1) NOT NULL; ALTER TABLE phpbb_forums ADD forum_link_hit BIGINT(20) UNSIGNED NOT NULL; ALTER TABLE phpbb_users ADD user_sub_forum TINYINT(1) DEFAULT '1' NOT NULL; ALTER TABLE phpbb_users ADD user_split_cat TINYINT(1) DEFAULT '1' NOT NULL; ALTER TABLE phpbb_users ADD user_last_topic_title TINYINT(1) DEFAULT '1' NOT NULL; ALTER TABLE phpbb_users ADD user_sub_level_links TINYINT(1) DEFAULT '2' NOT NULL; ALTER TABLE phpbb_users ADD user_display_viewonline TINYINT(1) DEFAULT '2' NOT NULL; 上記をを打ち込んでもError 1046: No Database Selected と言われます。 そこでどのようにしてデータベースを選択する事が出来るのでしょうか? よろしくお願いいたします。