MySQL の auto_increment や PostgreSql の serial を持ったカラムは、てっきり主キー(プライマリキー)じゃないとダメかと思っていたのですが、どうやらそうではありませんでした。(あれっ、常識?)
MySQL では INDEX を貼らないとダメですが、主キーなしでテーブルが作成できます。
例えばこんなの。
1 2 3 4 5 | CREATE TABLE test ( suji int auto_increment NOT NULL, moji text NOT NULL, INDEX test_suji_key(suji) ) TYPE=InnoDB; |
そして、同じ値でインサートが可能です。
1 2 | INSERT INTO test (suji, moji) VALUES(1, 'a'); INSERT INTO test (suji, moji) VALUES(1, 'a'); |
PostgreSql の場合は primary key の指定なしでテーブル作成が可能で、同じ値のデータも投入できます。
1 2 3 4 5 6 | CREATE TABLE test ( suji serial NOT NULL, moji text NOT NULL ); INSERT INTO test (suji, moji) VALUES(1, 'a'); INSERT INTO test (suji, moji) VALUES(1, 'a'); |
テーブルの設計の段階やリストアなどの時には要注意です。
わざわざシーケンスな値を使うのに、主キーにしないのはどんな時に便利なんだろ・・・。