シーケンスな番号を持ったテーブルに重複の値

サラトガIT日記 > データベース > シーケンスな番号を持ったテーブルに重複の値 シーケンスな番号を持ったテーブルに重複の値

※実経験の記憶を頼りに自宅の 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件)です。