繁体   English   中英

如何从ID列递增1的derby表中删除行?

[英]how to delete a row from table in derby where ID column increment by 1?

我的表和ID列中的表存在问题,当我插入记录>>时ID会自动增加1,但是当我删除旧记录并插入新记录时,增量会继续计数,而新记录的ID却没有增加不要按顺序获取旧记录的ID

我的删除语句: String Q="DELETE FROM EMPLOYEE ( ID , NAME) WHERE NAME='"+lst1.getSelectedValue()+"'"; stmt.execute(Q); String Q="DELETE FROM EMPLOYEE ( ID , NAME) WHERE NAME='"+lst1.getSelectedValue()+"'"; stmt.execute(Q);

创建语句: stmt.execute("CREATE TABLE EMPLOYEE(ID INTEGER NOT NULL PRIMARY KEY" + " GENERATED ALWAYS AS IDENTITY(START WITH 1, INCREMENT BY 1)" + ",NAME varchar(50),BIRTHDAY varchar(50),BIRTHMONTH varchar(50)" + ",BIRTHYEAR varchar(50),SEX varchar(50),DEPARTMENT varchar(50))");}

插入语句: String Query="INSERT INTO EMPLOYEE(NAME , BIRTHDAY , BIRTHMONTH , " + "BIRTHYEAR , SEX , DEPARTMENT) VALUES('"+txname.getText()+"','" + ""+compd.getSelectedItem()+"','"+compm.getSelectedItem()+"','" + ""+compy.getSelectedItem()+"','"+composx.getSelectedItem()+"','" + ""+txdep.getText()+"')"; stmt.execute(Query); String Query="INSERT INTO EMPLOYEE(NAME , BIRTHDAY , BIRTHMONTH , " + "BIRTHYEAR , SEX , DEPARTMENT) VALUES('"+txname.getText()+"','" + ""+compd.getSelectedItem()+"','"+compm.getSelectedItem()+"','" + ""+compy.getSelectedItem()+"','"+composx.getSelectedItem()+"','" + ""+txdep.getText()+"')"; stmt.execute(Query); 首先非常感谢您的回答并尝试帮助

您可以在应用程序端采用以下策略解决此问题:不真正删除行,而是添加一个布尔字段“已删除”,如果未删除则为0,如果删除则为1。

在这种情况下,您要避免ID序列出现漏洞。

否则,您将忍受ID序列中会有漏洞的事实。 这是什么问题?

顺便说一下,您正在使用的数据库是什么?

我读过你的评论。 关键是所有数据库都在表的末尾附加新记录。 因此,如果您想重复使用ID,则有以下几种可能性:

  1. 编写一段代码,检查序列中是否有空闲的ID,并在INSERT中使用它
  2. 编写一段代码将免费ID保存在某处,并在插入时重复使用它们。

换句话说:您必须直接管理ID。 数据库管理它们的方式是:

  1. 删除记录会产生一个不会自动填充的孔
  2. 添加新记录将最后一个ID递增

问候

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM