2016-03-02 3 views
0

Мне нужно что-то, что я не знаю, если это возможно. В основном я буду добавлять новые строки информации из Java в базу данных со структурой таблицы, например:Индекс увеличения при вставке новой строки в базу данных

Number | Color | Size 

    0 | Red | Big 

    1 | Green | Small 

    2 | Yellow| Medium 

Я использую Java, и я буду только ввести цвет и размер, и я хотел бы знать, возможно ли создать триггер, который будет хранить переменную Number (id) на стороне базы данных, и увеличивать ее каждый раз, когда я вставляю новую строку в db. Я думал делать что-то вроде: «INSERT INTO table ((null)», «Red», «Big»), а затем база данных обновит значение соответствующим номером. Также должно быть понятно, что некоторые строки может быть удалено, но это не повлияет ни на что, например: если у меня есть идентификаторы 0, 1, 2 и я удаляю 1, следующая строка должна быть равна 3.

Другое дело, я использую Sybase SQL Anywhere 12, чтобы сделать это.

+1

Посмотрите колонки 'identity' для Sybase. –

ответ

1

Как сказал @Gordon Linoff ...

Идентичность колонны делают это, например ...

create table T1 (ID int identity(1,1), Name nvarchar(100)) 

В этом случае вы бы пойти ...

insert into T1 (Name) values ('John') 

Итак, вы бы ввели имя «Джон» и сам БД дали бы ему ID 1 В следующий раз, когда вы вставляете, ID 2 будет установлен ... и так далее и далее.

Identity(1,1) - it means start from 1 and increment it by 1 on new insert 

Дело в том, что после того, как число взято, нет возврата, поэтому, если у вас есть идентификаторы 1, 2, 3 .. и удалить ID 3 .. на следующем вставке ID будет увеличен до 4, он не будет заполнять «недостающее число»

+0

Спасибо за ваш вклад, хотя я хотел бы спросить, как я могу продолжить, если у меня будет еще одна колонка, например, идентификатор, имя и возраст? В частности, запрос Insert, я не понимаю его ** EDIT **: просто понял, что все-таки хе-хе было бы что-то вроде: Вставить в значения T1 (имя, возраст) ('John ', '20') – JDev

+1

Хороший человек! столбцы, которые являются тождественными, вы никогда не ставите инструкцию insert, поскольку они сами увеличиваются. Удачи – Veljko89

1

Существует несколько решений, которые удовлетворяют вашим требованиям, но в разных аспектах они отличаются друг от друга, и вы должны выбрать лучший.

Некоторые решения существуют в контексте БД. (например, ответ @Gregory), , но некоторые другие решения не зависят от типа БД и конкретных функций. это означает, что вы реализуете свое решение независимо от вашего типа db, и вы можете изменить свой db (oracle, sql-server, my-sql, ...), и вам не нужно менять свой Java-код. В jpa есть три стратегии последовательности для решения этой проблемы с помощью @GeneratedValue.

1) Секвенирование таблицы: для этой цели вы используете отдельную таблицу для своей цели. в этой таблице содержатся соответствующие идентификаторы для других таблиц с автоинкрементами с этой стратегией.

2) Объекты последовательности: вы используете объект последовательности в своих db и jpa обрабатываете его. Объекты последовательности поддерживаются только в некоторых базах данных, таких как Oracle, DB2 и Postgres.

3) Последовательность идентификации: использует специальные столбцы IDENTITY в базе данных, чтобы позволить базе данных автоматически назначать идентификатор объекту при его вставке. Столбцы идентификаторов поддерживаются во многих базах данных, таких как MySQL, DB2, SQL Server, Sybase и PostgreSQL.Oracle не поддерживает столбцы IDENTITY, но их можно имитировать с использованием объектов последовательности и триггеров.

Если вы хотите быть независимым от вашего типа db, я рекомендую вам использовать «таблицу стратегии» в jpa.

см. Java Persistence/Identity and Sequencing для деталей.

вы спросили:

Я хотел бы знать, если это возможно, чтобы создать триггер, который будет магазин переменная номер (идентификатор) на стороне базы данных, а также увеличить его каждый раз, когда я вкладышем новой строки в db.

Да, вы можете использовать триггер, но, как я уже упоминал, есть несколько более простых решений, а не просто.

Также должна быть возможность обнажить с тем, что некоторые строки могут быть удалены , но won'shouldn't влияют на что-нибудь

в JPA растворах удаленные идентификаторы что не используется в следующем но если вы реализуете свое собственное решение, вы можете их использовать.

Надеюсь, этот ответ поможет вам.

Смежные вопросы