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

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

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

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');

テーブルの設計の段階や、リストアなどの時には要注意です。わざわざシーケンスな値を使うのに、主キーにしないのはどんな時に便利なんだろ・・・。

最終更新日:

関連記事

人気記事

新着情報