Увеличение значения идентификатора таблицы для каждого INSERT

Я использую PostgreSQL со всеми своими таблицами. В настоящее время у меня есть таблица с именем comments с первичным ключом comment_id, который является VARCHAR длиной 4.

У меня есть настройка формы для вставки нового комментария в базу данных, но я не понимаю, как я заставлю свой Java-сервлет ++ использовать comment_id из его предыдущего значения. Например. С 0001 по 0002.


person RyanH    schedule 29.11.2012    source источник
comment
Если вы хотите придерживаться varchar, вы понимаете, что с длиной 4 вы не сможете обрабатывать более 10 тысяч комментариев, верно?   -  person digitaljoel    schedule 30.11.2012
comment
Это только для проекта Uni. Очень новичок в Java, извините за вопрос nooby.   -  person RyanH    schedule 30.11.2012
comment
nooby вопросы по-прежнему хорошие вопросы, вам нужно где-то учиться, не так ли?   -  person digitaljoel    schedule 30.11.2012


Ответы (2)


Вы не хотите использовать VARCHAR для столбца идентификатора. В postgres вы можете создать последовательность, а затем получить следующее значение этой последовательности для каждой вставки.

вот документы

По сути, вы делаете что-то вроде

CREATE SEQUENCE mysequence START 101

Затем, когда вы вставляете, вы делаете что-то вроде

INSERT INTO my_comment values (nextval('mysequence'), 'this is my comment');
person digitaljoel    schedule 29.11.2012

Используйте псевдотип serial. для начала. Он автоматически создает и присоединяет объект последовательности и устанавливает DEFAULT в nextval() из последовательности. Это все, что вам нужно. Эффективный тип столбца - integer. Также есть bigserial. Просто перейдите по ссылке на инструкцию.

CREATE TABLE comments (
    comment_id serial PRIMARY KEY
   ,comment text NOT NULL
   );

Вы можете игнорировать столбец для INSERT команд:

INSERT INTO my_comment (comment)
VALUES ('My comment here');

comment_id заполняется автоматически.
Но вы должны всегда предоставлять список столбцов для INSERT. Если позже вы измените макет таблицы, ваш код может выйти из строя. Можно пропустить список столбцов для специальных команд или когда структура таблицы гарантирована (например, когда вы создали таблицу в той же транзакции). Кроме этого, предоставьте список столбцов!

Если вы хотите вернуть полученный comment_id без повторного обращения к серверу:

INSERT INTO my_comment (comment)
VALUES ('My comment here');
RETURNING comment_id;

Подробности в отличном руководстве здесь.

person Erwin Brandstetter    schedule 29.11.2012