目の前に僕らの道がある

勉強会とか、技術的にはまったことのメモ

「2列のAUTO_INCREMENTキーの使用」を試してみる。

『実践ハイパフォーマンスMySQL第二版』のP442に書いてあるSQLの挙動がちょっとよく分からなかったのでと試してみた。

mysql> CREATE TABLE inc_test(
    ->   a INT NOT NULL,
    ->   b INT NOT NULL AUTO_INCREMENT,
    ->   PRIMARY KEY(a, b)
    -> ) ENGINE=MyISAM;
Query OK, 0 rows affected (0.01 sec)

mysql> INSERT INTO inc_test(a) VALUES(1), (1), (2), (2);
Query OK, 4 rows affected (0.00 sec)
Records: 4  Duplicates: 0  Warnings: 0

mysql> SELECT * FROM inc_test;
+---+---+
| a | b |
+---+---+
| 1 | 1 | 
| 1 | 2 | 
| 2 | 1 | 
| 2 | 2 | 
+---+---+
4 rows in set (0.00 sec)

この状態でさらに行を足すとこんな感じになります。

mysql> INSERT INTO inc_test(a) VALUES(1), (1);
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> SELECT * FROM inc_test;
+---+---+
| a | b |
+---+---+
| 1 | 1 | 
| 1 | 2 | 
| 1 | 3 | 
| 1 | 4 | 
| 2 | 1 | 
| 2 | 2 | 
+---+---+
6 rows in set (0.00 sec)

どうやら複合主キーの片方に同じ値が入るともう片方の列にAUTO_INCREMENTが効いて主キーがユニークになるように働くようです。分かったような。分からないような。ちょっとまだ理解が足りてないです。

ちなみにInnoDBだと複合主キーの片方にAUTO_INCREMENTを付けられないみたいです。

実践ハイパフォーマンスMySQL 第2版

実践ハイパフォーマンスMySQL 第2版