在数据库上插入新行时的增量ID

时间:2016-03-02 12:14:05

标签: java sql triggers insert increment

如果有可能实现,我需要一些我不知道的东西。基本上我将从java添加新的信息行到具有表结构的数据库,例如:

Number | Color | Size

   0   |  Red  | Big

   1   | Green | Small

   2   | Yellow| Medium

我正在使用java而且我只输入颜色和大小,我想知道是否可以创建一个触发器来存储数据库端的变量Number(id),并且每个都增加它我在数据库中插入一个新行。我在想做类似的事情,“INSERT INTO table((null),'Red','Big'),然后数据库会使用正确的Number更新值。 也应该可以忽略一些事实,即某些行可以被删除,但它不会影响任何事情,例如:如果我有ID的0,1,2并且我删除1,则下一行应该仍然是3。<​​/ p>

另一件事,我正在使用Sybase SQL Anywhere 12来执行此操作。

3 个答案:

答案 0 :(得分:1)

您应该在数据库中使用自动增量列。

看到这一点。

http://www.sqlines.com/sybase-asa/autoincrement_identity

答案 1 :(得分:1)

正如@Gordon Linoff所说......

标识列正在这样做,例如......

 <script src="~/Scripts/jquery-1.10.2.min.js"></script>  
//note just drag and drop the file into the page and VS will do the work for you of putting the proper URL there.

在这种情况下你会去......

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

所以,你要插入姓名&#39; John&#39;和DB本身会给他ID 1 下次插入时,ID 2将被设置......依此类推......

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

关于这一点,一旦采取了数字,就没有回头,所以如果你有ID 1,2,3 ..并删除ID 3 ..下一个插入ID将最多4,它不会填充&#34;缺少号码&#34;

答案 2 :(得分:1)

有几种解决方案可以满足您的要求,但在几个方面有所不同,您应该决定选择最好的解决方案。

DB上下文中存在一些解决方案。 (例如@Gregory回答), 但是其他一些解决方案与DB类型和特定功能无关。这意味着您可以独立于您的数据库类型实现您的解决方案,您可以更改您的数据库(oracle,sql-server,my-sql,...),而无需更改您的Java代码。 在jpa中,有三种使用@GeneratedValue解决此问题的序列策略。

1)表格排序:在db中为此使用单独的表格。此表包含具有此策略的具有自动增量列的其他表的正确ID。

2)序列对象:你在db中使用一个序列对象,jpa处理它。序列对象仅在某些数据库中受支持,例如Oracle,DB2和Postgres。

3)标识排序:在数据库中使用特殊的IDENTITY列,以允许数据库在插入行时自动为对象分配id。许多数据库都支持标识列,例如MySQL,DB2,SQL Server,Sybase和PostgreSQL。 Oracle不支持IDENTITY列,但可以使用序列对象和触发器来模拟它们。

如果你想独立于你的数据库类型,我建议你在jpa中使用“表策略”。

有关详细信息,请参阅Java Persistence/Identity and Sequencing

你问:

  

我想知道是否可以创建一个触发器   将变量Number(id)存储在数据库端,并将其递增   每次我在db中插入一个新行。

是的,你可以使用触发器,但正如我所提到的,有一些更简单的解决方案而不是它。

  

也应该可以裸露一些行可以   删除,但它不会影响任何事情

在jpa解决方案中,删除的ID不会在下次使用中使用,但如果您实现自己的解决方案,则可以使用它们。

我希望这个答案可以帮到你。