質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

6回答

19014閲覧

データベースのテーブルのIDを削除した時に空きを詰めたい。

Xenoverse

総合スコア11

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

1グッド

2クリップ

投稿2016/09/07 02:38

現在、PHPとMySQLを使用して予約システムを作っているのですが、レコードのID=2をdelete文で削除して、insert文で作成したらID=3でレコードが作成されるのですが、このままでは、IDが増え続けてしまうので、それを直したいのですが、いい方法はありますでしょうか?

sin0801👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答6

0

IDとはそういうものです。間を詰めてしまうと、指定したIDで別のレコードが
ヒットしてしまいシステムとしては最悪です。

ただしもしどうしてもやりたいならできないことはありません。

SQL

1create table hoge(id int not null unique); 2insert into hoge values(1),(2),(3),(7),(10); 3update hoge set id=(select @a:=@a+1 from ( select @a:=0) as dummy ) order by id;

投稿2016/09/07 02:49

yambejp

総合スコア114572

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

IDはURLや他のデータとも深く関わることが多いので、再利用をするデメリットが大きいです。

分かりやすいところだと、そのIDが含まれるURLをブックマークしておいたのに、再度訪れたらIDが再利用されて別のデータが表示されてしまうことが考えられます。w

そのため、確たる理由が無い限りは気にしないというのが一般的なアプローチかと思います。

どうしても嫌な場合は、
autoincrementをオフにしてデータ投入時に空きIDを自力で探して指定する。

データ削除時にそれ以降のデータのIDをアップデートして詰める

実IDとは別に表示用のIDを持たせて、それを上記の方法でアップデートする

等の方法があるかと思いますが、どれもとても面倒で、パフォーマンスにも深刻な影響が出る可能性があります。

投稿2016/09/07 02:57

tanat

総合スコア18709

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

気にしないことをおすすめします。

削除する前のレコードと、新たに追加したレコードは、もはや同じものではないので、IDが同じであるほうが不自然です。その考え方を受け入れるべきです。

どうしても、というなら、やり方はあります:

http://dev.mysql.com/doc/refman/5.6/ja/alter-table.html

新しい行に使用される AUTO_INCREMENT カウンタの値を変更するには、次のようにします。
ALTER TABLE t2 AUTO_INCREMENT = value;

投稿2016/09/07 02:49

編集2016/09/07 02:50
matobaa

総合スコア2493

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

それはそのままの方がいいと思いますよ。。
9月1日にはID:1は山田さんのデータだったのに、9月2日にはID:1は佐藤さんのデータになっているという事が発生するわけですよね?

投稿2016/09/07 02:56

編集2016/09/07 04:21
kunai

総合スコア5405

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

自己解決

返答ありがとうございます。
IDについて無知だったものなので、気にしなくていいんですね!
ありがとうございました!

投稿2016/09/07 02:53

Xenoverse

総合スコア11

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

そもそも、なぜ空いた番号を詰めたいのでしょうか。

  • 飛んでいると気持ち悪い→その気持ちを捨ててください。データベースエンジンによっては、途中で削除しなくても番号が飛ぶことがあります。
  • 番号の消費が心配→IDの桁数を増やしてください。32ビットであれば43億個、64ビットなら1800京個(符号付きならその半分)ありますので、実用上不足する心配はしなくて構いません。
  • 何かの処理がIDの連続性に依存している→そちらの処理を直してください。上でも触れたように、IDの連続性は(削除しなかったとしても)保証されません。

投稿2016/09/07 02:51

maisumakun

総合スコア145121

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問