Mysql重置自增完美解决方法
很早就知道msdn了,下载过软件,学习过经验。第一次发帖,编辑器看不懂,懒得管了,就是分享一下经验。
mysql的自增列,哪怕插入失败,也会自增,删除部分行以后,整体id特别难看。参考过很多人的经验。都是把原来表格清空,然后重新复制到新表里去。
这里介绍下完美解决办法。只有4行代码。顺便提供php源码。
测试的表明是cs,自增列是id
ALTER TABLE cs
MODIFY COLUMN id
int(11) NOT NULL FIRST ,DROP PRIMARY KEY;【将表里的id列,取消自增,取消主键】
ALTER TABLE cs
ADD COLUMN id2
int NULL AUTO_INCREMENT FIRST ,ADD PRIMARY KEY (id2
);【新增id2列,自增,主键。名字可以随意,别重复。】
ALTER TABLE cs
DROP COLUMN id
;【删除id列】
ALTER TABLE cs
CHANGE 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、加密数据)再次加密
软件同理解密。