2017-07-25 65 views
1

我在MySql中创建了一个表,其中列“id”为auto_increment和Primary_key。我最初做了3行,即1,2,3。我删除了不。 2行但编号仍为1,3。我如何将其更改为1,2。
MySql Table自动更新MySql行编号

+0

它是顺序的绝对重要吗? '1'和'3'只是让它独一无二。 – GibralterTop

+0

是啊!我需要它被连续列出。 –

回答

2

简短的回答是:你不要。改变这是一个多步骤的问题,如果你做得不对,可能会非常容易出错。坦率地说,它很少(如果有的话)有意义。

事参与这样一个任务:

  1. 删除你不想要的行(你这样做)

  2. 减去1从每一个id>=到的id你刚删除的行。

  3. 将自动增量计数器更新为小于当前值1。

  4. 对于这是外键的所有表做同样的事情。

如果您想删除多行,逻辑会非常快速地变得复杂得多。无论哪种方式,它都需要相当多的资源,并会对你的外键造成严重破坏。

这样的行为确实违背了人们通常如何使用数据库的原则。 RDMS不像Excel电子表格那样是一个平面文件。只要删除这些行并让自动增加的ID存在差距,那么它确实对您的应用程序没有任何影响。

+0

谢谢了。其实我确实需要ID列。你看,它是一个在线考试门户。管理员需要知道他即将删除的问题的序列号。 –

+0

我找到了一种方法。这很粗糙,但它的工作原理。我删除整个列并在用户/管理员进入删除选项之前再次创建它。 –

+0

Class.forName(“com.mysql.jdbc.Driver”); \t Connection conn = DriverManager.getConnection(“jdbc:mysql:// localhost:3306/OnlineExamination”,“root”,“root”); \t PreparedStatement ps = conn.prepareStatement(“alter table qna_c drop id”); \t int r = ps.executeUpdate(); \t ps = conn.prepareStatement(“alter table qna_c add column id int not null auto_increment primary first first”); \t r = ps.executeUpdate(); \t ps = conn.prepareStatement(“delete from qna_c where id =?”); \t ps.setInt(1,id); \t r = ps.executeUpdate(); –