mysql - 删除行时修复以下 id

标签 mysql

我有一个包含一些行的表,每一行都有一个唯一的键。从表中删除一行时,该行下方的所有行都应“上移”。 MySQL 中是否有一些内置函数可以执行此操作,或者我应该只使用 PHP 或 UPDATE table SET id=id-1 WHERE id > deletedid 来执行此操作?

用最后一个好像有点乱。 执行此操作的最佳方法是什么?

最佳答案

  1. 你为什么要这样做?我知道在您的唯一 ID 序列中有漏洞很丑陋,但是使数据库外部对 ID 的任何引用无效的缺点通常要大得多。正常的事情是只接受序列不会连续。如果它们表示一个序列,请考虑仅按顺序排序,而不是期望第 N 个值具有值 N(任何类型的迭代都应为此用途在某处提供自己的索引)。

  2. 如果该值是您自己设置的,并且您肯定希望将其保留为从 1 到 N(N="行数")的值,并且您希望保留值的顺序,即使它们不是按照插入行的顺序排列的,那么“UPDATE table SET id=id-1 WHERE id > deletedid”可能是最好的答案。

  3. 如果该值是一个 auto_increment 字段,并且您不关心哪些数字与行一起使用,只要每行都有一个从 1 到 N 的数字,您也可以执行 ALTER TABLE DROP COLUMN 'columnname'然后再次 ALTER TABLE 再次添加该列,数据库将从 0 重新生成 ID。(不一定以相同的顺序,但通常是这样。)

  4. 可能有一种方法可以仅对该点之后的行重新编号,但是(根据快速谷歌)看起来没有比您已经计划的更容易的事情了。

关于mysql - 删除行时修复以下 id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6580591/

相关文章:

mysql - 玩2.4框架和MySQL

mysql - MySQL数据库中NULL和NOT NULL是什么意思

mysql - 查找边界框中的所有地理位置

mysql - 子查询中的未知列 - mysql

mysql - 如何检索MySql数据库中特定半径内的所有行

php - 建立数据库连接 PDO 时出错

mysql - Rails 4 - 从 SQLite 切换到 MySQL - 无法添加外键约束

php - 如何将csv数据逐列输出

mysql - 当查询次数大于某个数字时返回查询?

php - 我如何摆脱此警告'mysql_fetch_array()期望参数1为资源'