ハードディスクメンテナンス ブログ

投稿記事数7,500以上!PC,カメラ,オーディオ,ラジオ,航空,旧ゲームなど

[MySQL] idを詰める(連番を振り直す)方法

      2015年01月12日


数分毎に定期的にログを取得するようなプログラムを書き、DBに格納し始める。

だが、ログが膨大になったのでスリム化したい。

数分毎なので1日に多数のレコードがあるが、内容(atai)を調べると、その中の1つだけで事足りる場合。

<test_db_001>
id,date,time,atai
1,2015-01-01,00:10:00,10
2,2015-01-01,00:20:00,10
3,2015-01-01,00:30:00,10
4,2015-01-02,00:10:00,20
5,2015-01-02,00:20:00,20
6,2015-01-02,00:30:00,20

「その中の1つだけで事足りる」というのは、値は常に変化するが、その動きが小さいため、どれか1つのレコードを抜き出しても問題ないような種のデータである。

まずは年月日(date)でSELECTして抽出する。

SELECT * FROM test_db_001 GROUP BY date ORDER BY id ASC ;

# 但しこの文でSELECTできるのは、dateが2015-01-01であればid(1,2,3)のどれであるかは不明なので、明確にするならそれに適したSELECT文を書くこと。

結果、id(1,4)が選択される。

<test_db_001>
id,date,time,atai
1,2015-01-01,00:10:00,10
4,2015-01-02,00:10:00,20

この状態でexportし、別名(test_db_002)でimportする(copyでも可)。

スポンサーリンク

しかし、これではidに隙間が生じており、使いにくい。

システムがidに依存しない場合、これを詰めてしまおう。

SET @i := 0 ;必須
UPDATE test_db_002 SET id = (@i := @i +1) ;

これで、以下のようにidを詰める(連番の振り直し)ことができる。

<test_db_002>
id,date,time,atai
1,2015-01-01,00:10:00,10
2,2015-01-02,00:10:00,20

ここでAUTO_INCREMENTを変えることを忘れないように。

この場合では、最終のidが2なので、次のid(AUTO_INCREMENT)は3になる。

そして、test_db_002をtest_db_001にリネームして終了。

phpMyAdminが使える環境であれば、簡単な操作で実行可能だ。

exportもimportも画面上部から可能であり、上のSQL文(UPDATE…)も画面上部にある「SQL」で可能。

AUTO_INCREMENTとリネームは、画面上部の「操作」にある。

操作

元の(膨大な)ログが必要であれば、リネームするかexportするなどして保存しておくこと。



sha-bc@336×280

アマゾン(タイムセール)




sha-bc@336×280

アマゾン(タイムセール)


  関連記事

Ubuntu 14.04
Ubuntu 14.04 LTS 日本語版 CF-R6

Ubuntu 14.04 日本語版 が出ているので、サブマシン(CF-R6)にイ …

iPhone 6s/6s Plusのアタリかハズレ問題と、iPod touch 第6世代 [N102AP]

iPhone 6s/6s Plusに搭載されているA9チップの製造元により、性能 …

B00WHYQ3AS
Acer(エイサー)の 19.5型 液晶モニター 1366×768 TN 非光沢 K202HQLAbd がタイムセールで8,297円!

関連:[2016年7月14日] Acer液晶モニターでタイムセール+クーポンの合 …

B00UJK38YQ
GIGABYTE(ギガバイト)の ビデオカード Geforce GTX960搭載 GV-N960WF2OC-4GD がタイムセールで23,978円!

GIGABYTE ビデオカード Geforce GTX960搭載 オーバークロッ …

B0123BQ3CM
SanDiskの SDXCカード Extreme PRO 64GB UHS-I Class10 95MB/秒 SDSDXPA-064G-EPK2 がタイムセールで8,430円!

SanDisk Extreme PRO SDXCカード UHS-I Class1 …

B014NH551E
iiyamaの 27型液晶モニター TNパネル WQHD(2560×1440) B2783QSU-B1 がタイムセールで46,835円!

iiyama WQHD対応 27型ワイド液晶ディスプレイ(27inch/TN/2 …

B00NFB5I4O
I-O DATAの 27型 ADS広視野角パネル フルHD 液晶モニター DIOS-MF271XDB がタイムセールで23,560円!

I-O DATA 27型ADS広視野角パネル 液晶(フルHD/HDMI/ちらつき …

B00URHSWYW
ASUSの 24型 ゲーミング液晶モニター FullHD(1920×1080) 3年保証 VX248H がタイムセールで19,930円!

ASUS Gamingモニター24型フルHDディスプレイ ( 応答速度1ms / …

B00VX82PA6
Transcendの SSD 512GB SATA3 6Gb/s TS512GSSD370S 3年保証 がタイムセールで19,950円!

Transcend SSD 512GB 2.5インチ SATA3 6Gb/s M …

B00VX82PA6
Transcend(トランセンド)の SSD 512GB SATA3 6Gb/s TS512GSSD370S 3年保証 がタイムセールで16,900円!

Transcend SSD 512GB 2.5インチ SATA3 6Gb/s M …