2013-03-10 2 views
0

Проблема

У меня есть таблица по некоторым данным, имеет ID столбец целого типа (который также является первичным ключом).Создать новую запись таблицы с новым идентификатором

Когда новая запись данных добавляется в таблицу, она должна получить новый идентификатор, тогда как идентификатор не известен приложению, которое вставляет объект, но оно должно быть задано базой данных. Например, идентификаторы должны быть назначены как 0, 1, 2, ...

Предположим, что у меня есть все другие данные для новой записи, как бы я сделал вставку? Обычно:

insert into T values(123, 'data'); 

Но теперь я не знаю, что поставить вместо 123 - вы бы создать какой-то глобальной переменной NEXTID в базе данных, которая обеспечивает идентификаторы и запрос/обновить это значение каждый раз перед установкой в T?

Вопросы

  1. Как справиться с такой проблемой? Предпочтительным является решение, обеспечивающее сохранение параллелизма.
  2. Как достичь этого с помощью Java/myBatis? У меня есть класс Java, который соответствует структуре таблицы, и новый объект должен быть добавлен в базу данных, автоматически получая новый идентификатор.

Update

То, что я искал был автоинкрементным.

  • Существует ли стандартный способ SQL (независимый от базы данных) объявления столбца как автоматического приращения? Я использую Apache Derby и GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1) предлагается here.
  • Как выглядит вставка в таблицу, содержащую столбцы с автоматическим увеличением?
  • Каков наилучший способ получить созданное значение автоинкремента после вставки, когда возможен одновременный доступ к базе данных?

Я принимаю ответ, который включает в себя объяснение и SQL инструкции для объявления и вставки :)

+4

Вам нужно объявить столбец как автоматическое приращение и не давать никакого значения в поле «id». значение будет генерироваться автоматически. – BobTheBuilder

+0

Возможный дубликат http: // stackoverflow.com/questions/9414826/sql-server-how-to-add-new-identity-column-and-fillulate-column-with-ids – DevelopmentIsMyPassion

+0

Кроме того, никогда не будет плохой идеей явно указывать имена столбцов, которые вы заполняете: 'INSERT INTO tablename (columnname1, columnname2, ...) VALUES (value1, value2, ...)'. Это особенно важно в некоторых продуктах SQL, когда вам нужно опустить столбец автоматического увеличения. –

ответ

0

Если вы используете SQLServer, что делает столбец типа идентичности будет решать цель что-то вроде этого .

ALTER TABLE [dbo].[T] ADD [Column1] INT identity (1, 1) 

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

0

В MySQL вы можете использовать

ALTER TABLE table_name ADD id INT AUTO_INCREMENT; 

это автоматическое приращение столбца ID, вы не должны давать в вкладыше.