Проблема
У меня есть таблица по некоторым данным, имеет ID
столбец целого типа (который также является первичным ключом).Создать новую запись таблицы с новым идентификатором
Когда новая запись данных добавляется в таблицу, она должна получить новый идентификатор, тогда как идентификатор не известен приложению, которое вставляет объект, но оно должно быть задано базой данных. Например, идентификаторы должны быть назначены как 0, 1, 2, ...
Предположим, что у меня есть все другие данные для новой записи, как бы я сделал вставку? Обычно:
insert into T values(123, 'data');
Но теперь я не знаю, что поставить вместо 123 - вы бы создать какой-то глобальной переменной NEXTID
в базе данных, которая обеспечивает идентификаторы и запрос/обновить это значение каждый раз перед установкой в T
?
Вопросы
- Как справиться с такой проблемой? Предпочтительным является решение, обеспечивающее сохранение параллелизма.
- Как достичь этого с помощью Java/myBatis? У меня есть класс Java, который соответствует структуре таблицы, и новый объект должен быть добавлен в базу данных, автоматически получая новый идентификатор.
Update
То, что я искал был автоинкрементным.
- Существует ли стандартный способ SQL (независимый от базы данных) объявления столбца как автоматического приращения? Я использую Apache Derby и
GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1)
предлагается here. - Как выглядит вставка в таблицу, содержащую столбцы с автоматическим увеличением?
- Каков наилучший способ получить созданное значение автоинкремента после вставки, когда возможен одновременный доступ к базе данных?
Я принимаю ответ, который включает в себя объяснение и SQL инструкции для объявления и вставки :)
Вам нужно объявить столбец как автоматическое приращение и не давать никакого значения в поле «id». значение будет генерироваться автоматически. – BobTheBuilder
Возможный дубликат http: // stackoverflow.com/questions/9414826/sql-server-how-to-add-new-identity-column-and-fillulate-column-with-ids – DevelopmentIsMyPassion
Кроме того, никогда не будет плохой идеей явно указывать имена столбцов, которые вы заполняете: 'INSERT INTO tablename (columnname1, columnname2, ...) VALUES (value1, value2, ...)'. Это особенно важно в некоторых продуктах SQL, когда вам нужно опустить столбец автоматического увеличения. –