Mysql重置自增完美解决方法-删除复制的方法

2025-3-26 / 0 评论 / 1 阅读

https://blog.csdn.net/wwt001/article/details/83505134

Mysql重置自增完美解决方法
很早就知道msdn了,下载过软件,学习过经验。第一次发帖,编辑器看不懂,懒得管了,就是分享一下经验。
mysql的自增列,哪怕插入失败,也会自增,删除部分行以后,整体id特别难看。参考过很多人的经验。都是把原来表格清空,然后重新复制到新表里去。
这里介绍下完美解决办法。只有4行代码。顺便提供php源码。
测试的表明是cs,自增列是id

ALTER TABLE csMODIFY COLUMN id int(11) NOT NULL FIRST ,DROP PRIMARY KEY;【将表里的id列,取消自增,取消主键】
ALTER TABLE csADD COLUMN id2 int NULL AUTO_INCREMENT FIRST ,ADD PRIMARY KEY (id2);【新增id2列,自增,主键。名字可以随意,别重复。】
ALTER TABLE csDROP COLUMN id;【删除id列】
ALTER TABLE csCHANGE COLUMN id2 id int(11) NOT NULL AUTO_INCREMENT FIRST ;【把id2改为id1】

原理特别简单的。原来的id取消自增和主键,只用于表格的排序。新插入一个id2,自然会根据自增重新排列。删除id,id2改id即可。

附上php操作代码。直接 XXX.php?biao=表名 一键恢复。不确定是否有bug,麻烦大家指教。

<?php header("Content-type:text/html;charset=utf-8");//字符编码设置 require("db_config.php"); if(\$_GET['biao']==''){echo '缺少表名';exit;} \$con =mysqli_connect(\$servername, \$username, \$password, \$dbname); \$sql="ALTER TABLE `".\$_GET['biao']."` MODIFY COLUMN `id` int(11) NOT NULL FIRST ,DROP PRIMARY KEY;"; \$result = mysqli_query(\$con,\$sql); \$sql="ALTER TABLE `".\$_GET['biao']."` ADD COLUMN `id2` int NULL AUTO_INCREMENT FIRST ,ADD PRIMARY KEY (`id2`);"; \$result = mysqli_query(\$con,\$sql); \$sql="ALTER TABLE `".\$_GET['biao']."` DROP COLUMN `id`;"; \$result = mysqli_query(\$con,\$sql); \$sql="ALTER TABLE `".\$_GET['biao']."` CHANGE COLUMN `id2` `id` int(11) NOT NULL AUTO_INCREMENT FIRST ;"; \$result = mysqli_query(\$con,\$sql); if (!\$result) { printf("Error: %s\n", mysqli_error(\$con)); exit(); } else{ echo "ok!"; } mysqli_close(\$con); ?>

一直很少交流一些经验。都是自己折腾一些,比如软件对接php相关加密。软件发送加密字符串,php解密。php查询到的信息,加密以后发给软件。从头到尾都是看上去乱码的形式。加密方法是参考了rc4加密,但自己在其中做了相应修改,目前来看,无法被破解,别人不知道加密方法。

软件发送 (时间、md5、加密数据)再次加密
服务器解密,判断md5,判断时间是否正负5分钟,解密数据。
发送 (时间、md5、加密数据)再次加密
软件同理解密。