Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何重新计算主索引?_Mysql - Fatal编程技术网

Mysql 如何重新计算主索引?

Mysql 如何重新计算主索引?,mysql,Mysql,我在mysql数据库中有一个带有自动递增主键的表。定期删除并添加此表中的行。因此,结果是最近一行的PK值增长非常快,但该表中没有那么多行 我想做的是以这种方式“重新计算”PK,第一行的PK=1,第二行的PK=2,依此类推。此表的PK没有外部依赖项,因此它是“安全的” 是否仅使用mysql查询/工具就可以完成?或者我必须从我的代码中执行它?set@pk:=0; set @pk:=0; update your_table set pk=@pk:=@pk+1 order by pk;

我在mysql数据库中有一个带有自动递增主键的表。定期删除并添加此表中的行。因此,结果是最近一行的PK值增长非常快,但该表中没有那么多行

我想做的是以这种方式“重新计算”PK,第一行的PK=1,第二行的PK=2,依此类推。此表的PK没有外部依赖项,因此它是“安全的”

是否仅使用mysql查询/工具就可以完成?或者我必须从我的代码中执行它?

set@pk:=0;
set @pk:=0;

update 
  your_table
  set pk=@pk:=@pk+1
  order by pk;       <-- order by original pk
更新 你的桌子 设置pk=@pk:=@pk+1
按主键排序 这将解决您的问题:
简而言之:您可以使用ALTER TABLE\u tablename AUTO\u INCREMENT=1。若要将其重置为1,应首先从表中删除记录,或将其id更改为最低值。

重新计算后,不要忘记更改表中的自动增量值:

mysql> SELECT @pk;
+------+
| @pk  |
+------+
| 9911 |
+------+
1 row in set (0.00 sec)


ALTER TABLE your_table AUTO_INCREMENT = 9912;
当没有“PK的外部依赖性”时,为什么需要索引?