【问题标题】:MySQL/PHP How would I insert an row into mysql and increase all the auto incremented fields below by 1MySQL/PHP 如何在 mysql 中插入一行并将下面的所有自动递增字段增加 1
【发布时间】:2013-02-22 04:42:37
【问题描述】:

说我有一张这样的桌子:

id|名称 |
----------
1 |弗雷德 |
2 |吉姆 |
3 |特蕾西 |
4 |斯泰西|

“id”是自动递增的主索引。

我想在“#2 - jim”下面添加一行。我会称这个新行为“john”。

如何在“jim”下方插入“john”,让 john 的“id”为 3,而“john”下方名称的所有 id 都会增加 1?

例如

id|名称 |
----------
1 |弗雷德 |
2 |吉姆 |
3 |约翰 |
4 |特蕾西|
5 |斯泰西|

非常感谢

【问题讨论】:

  • 如果你想要这个进行排序,你应该使用 id 以外的东西。如果要跟踪最近的条目,请添加带有时间戳的列,然后使用 ORDER BY DESC 查找最近的条目。

标签: php mysql auto-increment


【解决方案1】:

这个命令会在jim之后给每个人的id加1。

UPDATE your_table SET id=id+1 WHERE id>2;

此命令将在 jim 之后插入一行。

INSERT INTO your_table(id,name) VALUES(3,'john');

更改主键值是一个非常糟糕的主意。如果您的表与其他表有关系,则会出现一致性问题。假设它是客户表并且有一个订单表。上面的思路会让trstacy的订单会连接到tracy和tracy的john等。

【讨论】:

    【解决方案2】:

    这不是自动增量指令的工作方式。您需要使用 UPDATE 将第 3 行更改为 john,使用 UPDATE 将第 4 行更改为 tracy,并使用 INSERT 创建新的第 5 行作为 stacy。如果您需要在 10,000 条记录表的第 5 行之后插入一行,那就太糟糕了。

    您可以直接更改 id 值,但这是非常糟糕的做法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-26
      • 1970-01-01
      • 2011-08-23
      • 1970-01-01
      相关资源
      最近更新 更多