『実践ハイパフォーマンス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を付けられないみたいです。
- 作者: Baron Schwartz,Peter Zaitsev,Vadim Tkachenko,Jeremy D. Zawodny,Arjen Lentz,Derek J. Balling,伊藤直也(監訳),田中慎司(監訳),吉川英興(監訳),株式会社クイープ
- 出版社/メーカー: オライリージャパン
- 発売日: 2009/12/14
- メディア: 大型本
- 購入: 17人 クリック: 304回
- この商品を含むブログ (46件) を見る