【问题标题】:MySql - Deleting a rowMySql - 删除一行
【发布时间】:2014-11-02 12:48:48
【问题描述】:

我在 MySql 中有一个表,其中包含 user_id 作为第一个字段。该字段是一个主键,它被定义为自动递增。问题是每当我使用命令从表中删除一行时,

delete from user where username="username"; //Username is the Second field

它被删除了,但是当我创建一个新条目时,不会通过覆盖删除的行来调整 user_id。 假设我删除了表中最后一行的第三行,那么我的新条目创建为 user_id = 4 即使 user_id = 3 现在不存在。

这是 Sqlworks 的工作方式还是我应该对查询进行更改?

【问题讨论】:

  • 因为user_id是自增主键。
  • 这是设计使然。 Auto_increment id 被设计为只能使用一次。
  • 我认为您需要对 SQL 的工作原理进行一些研究和阅读
  • 这是数据库在自动递增键上的预期行为。如果您想将计数器重置为某个值,可以在此处查看:stackoverflow.com/a/8923132/99557
  • 如果你想改变自动增量启动 Id alter table user AUTO_INCREMENT=3;但它提出了一些问题。将用户信息映射到另一个表意味着,该信息将与另一个用户发生冲突。

标签: mysql sql-delete


【解决方案1】:

我建议您创建另一个字段,以便您拥有

id | user_id | username

id 应该是auto_increment

要插入,您可以计算 DB 中的条目并将数字提高 +1。

那么你就会得到你想要的结果。

当然,您可以为此使用 id,但在这种情况下,您总是必须重新索引您的 user_id。

实际上这不是应该使用主键的方式。

示例:

假设您有一家拥有 100 名客户的公司。今天客户 50 有客户编号 50,明天他有 48,因为另外 2 位客户离开了您的公司。没有意义:D

【讨论】:

  • 是的,这将成为冲突。我的程序是登录和注册,它使用许多表,如果我改变我的自动增量值,它会变得一团糟。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-03
  • 2021-12-18
相关资源
最近更新 更多