シーケンスな番号を持ったテーブルに重複の値
※実経験の記憶を頼りに自宅の PC 環境(VMWareなど)で再現している内容もあるのでご注意下さい
2007-06-10
MySQL の auto_increment や PostgreSql の serial を持ったカラムは、てっきり主キー(プライマリキー)じゃないとダメかと思っていたのですが、どうやらそうではありませんでした。(あれっ、常識?)
MySQL では、INDEX をはらないとダメですが、主キーなしでテーブルが作成できます。
CREATE TABLE test ( suji int auto_increment NOT NULL, moji text NOT NULL, INDEX test_suji_key(suji) ) TYPE=InnoDB;
そして、同じ値でインサートが可能です。
INSERT INTO test (suji, moji) VALUES(1, 'a'); INSERT INTO test (suji, moji) VALUES(1, 'a');
PostgreSql の場合は primary key の指定なしでテーブル作成が可能で、同じ値のデータも投入できます。
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');
テーブルの設計の段階や、リストアなどの時には要注意です。わざわざシーケンスな値を使うのに、主キーにしないのはどんな時に便利なんだろ・・・。
関連記事
上記の記事に関連する記事(最新の10件)です。


