2013-03-10 75 views
0

問題

我有對於具有型整數的ID柱(其也是主鍵)一些數據的表的新表項。創建新的ID

當一個新的數據條目添加到表中時,它應該得到一個新的ID,而插入該對象的應用程序不知道ID,但它應該由數據庫給出。例如,ID應分配爲0,1,2,...

假設我有新條目的所有其他數據,我將如何進行插入?通常情況下:

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

但現在我不知道該用什麼來代替123 - 將你提供的ID和查詢數據庫中創建某種全局變量NEXTID的/插入之前,每次更新該值變成T

的問題

  1. 如何處理這類問題?一個解決方案是併發保存是可取的。
  2. 如何通過Java/myBatis實現這一目標?我有一個與表結構相對應的Java類,並且應該將新對象添加到數據庫中,自動獲取新ID。

更新

我搜索了什麼是自動遞增。

  • 是否存在將列聲明爲自動增量的標準SQL方式(與數據庫無關)?我正在使用Apache DerbyGENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1)建議使用here
  • 如何插入包含自動增量列的表格?
  • 如果可以同時訪問數據庫,插入後獲得創建的自動增量值的最佳方式是什麼?

我會接受,包括申報和插入:)解釋和說明SQL回答

+4

您需要將該列聲明爲自動增量,並且不要給「id」字段賦予任何值。該值將自動生成。 – BobTheBuilder 2013-03-10 14:50:15

+0

可能重複http:// stackoverflow。com/questions/9414826/sql-server-how-to-add-new-identity-column-and-populate-column-with-ids – DevelopmentIsMyPassion 2013-03-10 15:06:50

+0

此外,顯式指定要填充的列名稱永遠不是一個壞主意: 'INSERT INTO tablename(columnname1,columnname2,...)VALUES(value1,value2,...)'。當您需要省略自動增量列時,對於某些SQL產品尤其重要。 – 2013-03-10 15:22:30

回答

0

如果使用的是SQLSERVER,使得標識類型的列會解決的目的是這樣的 。

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

對於像oracle這樣的其他人,您可以爲簡單的數據庫序列。

0

在MySQL中,你可以使用

ALTER TABLE table_name ADD id INT AUTO_INCREMENT; 

這種自動遞增的ID列,您不必在插入給。