オートナンバー(AUTO_INCREMENT)

 そういえば MySQL の auto_increment 属性って使ったことがなかった。
一応動かしておくべきだろうと思い、動作確認。以下サンプル。
 auto_incrementに属性をつけたカラムは Primary key にしなければならない。これポイント。

mysql> create table ai_test (id integer auto_increment,
                             data varchar(32), 
                             primary key (id));
Query OK, 0 rows affected (0.17 sec)

mysql> desc ai_test;
                                                                                                                            • +
Field Type Null Key Default Extra
                                                                                                                            • +
id int(11) PRI NULL auto_increment
data varchar(32) YES NULL
                                                                                                                            • +
2 rows in set (0.03 sec) mysql> insert into ai_test (data) values ('testtest'); Query OK, 1 row affected (0.00 sec) mysql> select * from ai_test;
                                • +
id data
                                • +
1 testtest
                                • +
1 row in set (0.00 sec) mysql> insert into ai_test (data) values ('t33esttest'); Query OK, 1 row affected (0.00 sec) mysql> select * from ai_test;
                                    • +
id data
                                    • +
1 testtest
2 t33esttest
                                    • +
2 rows in set (0.00 sec)

found_rows()

 MySQL の便利な構文である LIMIT 句を使用したときに、本来全体で何件かを知りたいことは多々ある。そのようなときには、同じ条件で select(*)の SQL 文を実行することで全体の件数が判る。
 ・・・というのは当たり前の話。ここでは found_rows() 句をメモ。

SELECT SQL_CALC_FOUND_ROWS * FROM mytable WHERE ...... LIMIT 10;

 と実行する。
 その後

SELECT found_rows();
select SQL_CALC_FOUND_ROWS *, found_rows() from artist_rel limit 10;
で以下のように全体の件数が返ってくる。
SQL_CALC_FOUND オプションがポイント。当然つけない場合よりも遅くなるが、count(*)と2回のクエリを実行するよりは高速になる。

mysql> select found_rows();
                              • +
found_rows()
                              • +
7049
                              • +
1 row in set (0.00 sec)