AUTO_INCREMENT属性を利用したい

MySQLでは連番をつけてあげる(AUTO_INCREMENT) という属性があるとわかったので使ってみようと思った。

でも、ものすごくひっかかってしまったので来週以降の私のために(そしてこのブログどうすんのかというもてあまし感もフォローしつつ)ちょっとメモしておく。

一応はじめに謝っておくが、このメモ、構成とかない。
思いついた順で書いてる。
あと、あとでちょくちょく加筆修正する。とくに後半。
まぁこれは私のためのメモであるのでしかたがない。
あと、今後も時々こういうポストがあったりなかったりするかもしれない。

さてどうでもいいことはさておき。

前提としては

  1. news_dというテーブルをつくって、四つのフィールドを中身とすることにしている。
  2. 既に存在するフィールドに属性つけたかったけどわからなかったのでフィールド追加することにした
  3. 連番が入るフィールドを主キーにしたい

ひとまず参考書ひっぱってもわからんかったので、ぐぐった知識を寄せ集めて、こういう記述してみた。

mysql> alter table news_d add id INT UNSIGNED NOT NULL AUTO_INCREMENT, add INDEX
 (id);

でも、これじゃだめなわけだ。
ていうか考えたらわかる話だが、上記の記述をして、確認したらこうなった。

mysql> show fields from news_d;
+-------------+------------------+------+-----+---------+----------------+
| Field       | Type             | Null | Key | Default | Extra          |
+-------------+------------------+------+-----+---------+----------------+
| use_title   | varchar(65)      | YES  |     | NULL    |                |
| use_message | text             | YES  |     | NULL    |                |
| use_time    | date             | YES  |     | NULL    |                |
| id          | int(10) unsigned | NO   | MUL | NULL    | auto_increment |
+-------------+------------------+------+-----+---------+----------------+
4 rows in set (0.02 sec)

idのKeyみてくれよ。主キーじゃないんだ。いや、そういう風に書いてんだろという話ですけど、そもそも私の知識はつぎはぎで、基本的なことがわかってない。

「MULってなんじゃい」と思ってぐぐった。

出てきた。

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

http://oshiete1.goo.ne.jp/qa1333087.html
…なるほど。
これは「重複キー」というやつのことなのか。なんで重複キー指定してんの。違うのにしたいよ、と思った。質問者さんの質問に、補足回答がついてた。

それによると

ALTER TABLE テーブル名 DROP INDEX `現在のインデックス名`,ADD UNIQUE `新しいインデックス名` (`hoge`,`huge`)

一旦、DROP INDEXで消してADDでまた加えます。

って書いてある。

でもなんかこの書き方がよくわからん。失敗したらドツボにはまりそう。ていうか記述の意味が大まかにもわからないのに使うのはどうか。
結局、無意味かもだけど、わたしに理解できる書き方にした。

mysql> alter table news_d drop id;
Query OK, 0 rows affected (0.03 sec)
Records: 0  Duplicates: 0  Warnings: 0

まず削除して、それから追加してやった。
もちろん主キーにするのが目的なので、今度はちゃんとPRIMARY KEY指定にした。

mysql> alter table news_d add id INT PRIMARY KEY AUTO_INCREMENT,add INDEX(id);
Query OK, 0 rows affected (0.03 sec)
Records: 0  Duplicates: 0  Warnings: 0

…できた。

mysql> show fields from news_d;
+-------------+-------------+------+-----+---------+----------------+
| Field       | Type        | Null | Key | Default | Extra          |
+-------------+-------------+------+-----+---------+----------------+
| use_title   | varchar(65) | YES  |     | NULL    |                |
| use_message | text        | YES  |     | NULL    |                |
| use_time    | date        | YES  |     | NULL    |                |
| id          | int(11)     | NO   | PRI | NULL    | auto_increment |
+-------------+-------------+------+-----+---------+----------------+
4 rows in set (0.01 sec)

とくに最初どうやったら変更できるんだろう?というのをひたすら探していたので(できるかできないかもわからない)(でも追加はともかく変更はどうなの…?と思う)、これだけのことにほんとにひっかかった。いくない。がんばらなきゃな、と悲しくなった。