• 締切済み

誤って削除したIDカラムを復元する方法

データを入力している最中、誤ってオートインクリメントのIDカラム(int 11)を削除してしまいました。 このテーブルのそれぞれのレコードに再度IDを割り振りたいです。 まだこのデータを使って何か使っているわけではないので、 IDの値自体は元のものでなくてもかまいません。 ID name 1 aaa 3 bbb 6 ccc 7 ddd : などでしたら、 ID name 1 aaa 2 bbb 3 ccc 4 ddd : と、そとりあえず個々のレコードに適当なIDを設定することができれば十分です。 このような設定を行う方法をご教示ください。 よろしくお願いいたします。

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

みんなの回答

回答No.3

Dumpとってテーブル作り直してインポートする

  • freetaka
  • ベストアンサー率53% (106/197)
回答No.2

オートインクリメントは主キーにしか設定できないので 次の構文で削除してしまったテーブルに追加することができます alter table テーブル名 add id int primary key auto_increment first;

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

create table hoge(ID int not null primary key auto_increment,name varchar(10)); insert into hoge values(1,'aaa'),(3,'bbb'),(6,'ccc'),(7,'ddd'); set @ID:=0; update hoge set ID=(@ID:=@ID+1) order by ID; alter table hoge auto_increment=1; 今回のケースだとIDのカラムが削除されているならIDでソートはできないのでorder by句は不要。 ただしデータの出現順はorder by句が無い限り保障されないのでIDは元の 順番で振られる保障はありません

関連するQ&A

  • PHP/MySQL INSERT文について。

    PHP/MySQL INSERT文について。 こんばんは。 PHP・MySQLでデータベースへデータの書き込みを試行錯誤しております。 そこで一つどうしても解決出来ない問題(謎)があるので質問させて頂きます。 簡易的な質問内容としては 全てのカラムに対する値の挿入は可能なのに カラムを指定して値を挿入しようとしたらエラーが出ます。 データベースの設定はテーブル名【TESTtable】 フィールド 種別 NULL 属性/その他 AAA int(6) No UNSIGNED ZEROFILL / auto_increment BBB int(4) Yes CCC int(4) Yes DDD int(4) Yes PHPでのSQL実行文をしてはの記述としては(値は全て可変で数値を代入します。) INSERT INTO TESTtable VALUES (last_insert_id(),50,600,50) とした場合は問題無くテーブルに書き込みされますが カラムを指定して INSERT INTO TESTtable (AAA,BBB,CCC,DDD) VALUES (last_insert_id(),50,600,50) とした場合、書き込みが行われません。 INSERT INTO TESTtable ('AAA','BBB','CCC','DDD') VALUES (last_insert_id(),50,600,50) INSERT INTO TESTtable (AAA,'BBB','CCC','DDD') VALUES (last_insert_id(),50,600,50) INSERT INTO TESTtable ('AAA','BBB','CCC','DDD') VALUES (last_insert_id(),'50','600','50') 等、色々試してみましたが不可能でした。 カラムAAAはauto_incrementにりますので毎回書き込みされますが BBB、CCC、DDDは書き込みが不要の場合もあるので カラム指定の書き込みは必須となるのですが・・・行き詰ってしまいました・・・。 ご教授頂ければ幸いです。 どうぞ、宜しくお願い致します。

    • ベストアンサー
    • MySQL
  • 集計方法について教えて下さい。PHP+MYSQL

    こんばんは。よろしくお願い致します。 データベースに下記のようなデータが入っています。 no point name --------------------- 123 100 aaa 123 50 aaa 124 100 bbb 130 30 ccc 131 80 ddd 131 100 ddd 131 20 ddd 133 10 eee このデータを元に、下記のような結果を得たいのです。 noが同じデータのpointを集計し、まとめたレコードの件数をcount項目として欲しいです。 no point name count ------------------------------ 123 150 aaa 2 124 100 bbb 1 130 30 ccc 1 131 200 ddd 3 133 10 eee 1 SQLだけで実現できるのでしょうか?? 具体的にどのような方法で実現できるか、教えて頂けると有難いです。 よろしくお願い致します。

    • ベストアンサー
    • PHP
  • CSVに外部テキストファイルを列として追加する方法

    こんにちは。 CSVファイル(base.csv)の先頭列に、別のテキストファイル(add.txt)の中身を新規の列として挿入したいと考えているのですが、よい方法がわかりません。。。 どうのような方法を使えば対応することができるでしょうか? どうぞよろしくお願いいたします。 ■CSVファイル(master.csv) title,developer_name,seller_name,primary_genre_name,application_url AAA,BBB,CCC,DDD,EEE AAA,BBB,CCC,DDD,EEE AAA,BBB,CCC,DDD,EEE AAA,BBB,CCC,DDD,EEE ■テキストファイル(add.txt) id 000 111 222 333 ↓ ■目標としたファイル(master.csv) id,title,developer_name,seller_name,primary_genre_name,application_url 000,AAA,BBB,CCC,DDD,EEE 111,AAA,BBB,CCC,DDD,EEE 222,AAA,BBB,CCC,DDD,EEE 333,AAA,BBB,CCC,DDD,EEE

  • EXCELで行の先頭データが同じ行の削除方法について

    EXCELで次のようなことをしたいのですがどうしたら簡単にできるでしょうか?  AAA   AAA  AAA  AAA  AAA  BBB  BBB  BBB  CCC  DDD  DDD  DDD  DDD 上ようのなデータで重複している部分を削除し、  AAA  BBB  CCC  DDD としたいのですが。 今は一行々々で確認しながら削除してます。3000行程あり困ってます。 どうしたら簡単にできるでしょうか?  

  • データの加工方法(SQL)について

    「TABLE1」から「TABLE2」というテーブルを作成したいと考えております。 TABLE1ではNAMEという項目がキーとなってデータが入っていました。 それをIDという項目をキーとした形にデータ加工したいと考えています。 各IDにおけるNAMEの数はMAXでも5個までとなります。 何か良い方法は有りますでしょうか? SQLのSELECT文で行う事を考えていますが、方法がわかりませんでした。 (EXCELなどで他に容易な方法があれば他の方法でもかまいません) よろしくお願いいたします。 ■TABLE1 ------------- ID NAME ------------- 1000 AAA 1000 BBB 1000 CCC 1000 DDD 1001 EEE 1001 FFF ------------- ■TABLE2 ---------------------------------------------- ID NAME1 NAME2 NAME3 NAME4 NAME5 ---------------------------------------------- 1000 AAA BBB CCC DDD 1001 EEE FFF ----------------------------------------------

  • 登録したレコードの主キーの取得方法

    主キーに自動インクリメント( nextval )を使用しているテーブルで、 そこにレコードを登録したときにそのとき使われた主キー を取得する方法はありますでしょうか。 例えば 主キー|データ 1|AAA 2|BBB 3|CCC にDDDと登録したら恐らくは4になるのですが、 主キー|データ 1|AAA 2|BBB 3|CCC 4|DDD ←追加された データを登録したときにその主キーに何が使われたかが知りたいです が知りたいです。 自分で考えてる方法は今の主キーで使ってるシーケンス+1が割り当てられる(だろう)というやり方なのですが、複数のレコード登録が同時にあった場合に不整合が起きるのでどうしたものかと困ってます。 なにか良い方法をご存知の方いらっしゃいましたらお教えください。

  • 同じ列に2行づつで出力するSQL

    次のようなテーブルがあったとき no | name 1 | aaa 3 | bbb 4 | ccc 6 | ddd (先頭はカラム名です) 以下のように出力するSQLは書けますでしょうか? no1| name1 | no2| name2 1 | aaa | 3 | bbb 4 | ccc | 6 | ddd

  • カラム名でseqとidではどちらがふさわしいのでしょうか?

    mysql5.1.33を使用しています。 例えば、ユーザ情報を格納するuserテーブルがあって ユーザが決める半角英数字からなるIDを格納するuser_idカラムがあるとします。 そしてAuto Incrementなカラムも付け足すと、 [user] seq INT(11) NOT NULL AUTO_INCREMENT, user_id varchar(16) PRIMARY KEY (seq) UNIQUE KEY user_id (user_id) この場合はseqカラムが主キーになるわけですが、 一般的にはカラム名はseqではなくてidですよね? なんで自分はseqにしたかというと、 user_idカラムのidには文字(半角英字)のIDを、 seqは連番を意味づけさせたいと思いました。 つまり seqがつくカラム名は連番で idがつくカラム名は文字列 と直感的に分かりやすくなるだろうと思ったからなのですが、 みなさんはこのケース(そもそもこのカラム構成が正しいかは分かりませんが・・)の場合は、 どのようなカラム名を付けますか?

  • 空きのID番号を取得する方法

    いつもお世話になっております。 create table AAA( ID int(6) primary key not null auto_increment, DATA varchar(30), )engine=MyISAM; というテーブルにおいて、 insertをすると、IDが1から順に割り振られていきますが、 途中のレコードをdeleteすると、そこが空きのID番号となってしまい、 次にinsertすると、空き番号が残ってしまいます。 やりたいことは、その空き番号を有効活用するために、 auto_incrementを使用せずに、空き番号を適当に取得して、 insertをしたいのです。 何か効率的な良い方法をご存知の方がいらっしゃいましたら、 ご教授いただけると幸いです。 よろしくお願いいたします。

    • ベストアンサー
    • MySQL
  • カラム名を全て表示したいのですが・・・。

    カラム名の出力について質問です。 Oracle9iでテーブルを選択してみました。 データ内容は以下のとおりです。 <AAAテーブル> aaa : CHAR 8 bbb : CHAR 1 ccc : CHAR 10 ddd : CHAR 2 eee : CHAR 3 すると結果がこうなりました。 select * from AAA; aaa b ccc dd eee  ←すいません、下の下線に合わせて文字があります。 -------- - ---------- -- --- 11111 1 1111111111 11 111 カラム名が短縮されてしまっているところで これを全て出力(例えばbbbというように出力)出来るようにするには col bbb format a3 col ddd format a3 というように見出し列の幅を数字で指定するということは 教えてもらったのですが、テーブルのカラム数が多くて困っています。 カラムごとではなく、sqlplusのSET等である程度まとめて 設定する事は出来ないでしょうか? 教えてください、よろしくお願いいたします。