之前用thinkPHP的插入数据的时候,可以不写主键,现在怎么不行了,我改了什么地方呢?

        $use = D('Classone');

        $data['姓名']='黄方舟';
        $data['学号']='1598756321';
        $data['语文']='101';
        $data['数学']='99';
        $data['英语']='115';
        $data['time']=date("Y-m-d H:i:s",Time());

        $use->create($data);
        $use->add();

这段代码之前行,会自动增加主键;
但是现在失效了,提示主键重复:
1062:Duplicate entry '0000000000' for key '学号' [ SQL语句 ] : INSERT INTO classone (语文,数学,英语,time,name) VALUES ('101','99','115','2017-08-22 02:31:58','黄方舟')

请问我是无意中改了什么才会这样的呢?

阅读 5.7k
2 个回答

补充,被踩莫名其妙,请评论说出你的不满好吗?是因为我自己遇到过这种问题,实际解决过才回答的,
烦请题主如果解决了问题帮我顶一下顶回来哈。

按照你说的,你的学号是自动增加,那么你填写的学号就无效了。有可能是你用来测试,生成了一大堆后删除又生成了一大堆,导致自动增加的计数器溢出。

解决:
第一步 返回最大 学号

select max(学号) from classone

第二部 对齐计数器

ALTER TABLE classone AUTO_INCREMENT = <value from step 1 + 100>;

最后重试插入数据的代码。
另外说一句,学号这东西自动增加怎么感觉有点奇怪,不过这个就是数据库结构的事情了。

你的数据库主键不是自增,而你又没指定主键值。导出全部插入0000000000,第一条可以插入,第二条以后就不可以了。

解决方法就是给classnone加上主键

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题