Failed to execute query: Duplicate entry '0' for key 'PRIMARY'

今天在做php登陆和登出会插入数据到log表中,,结果报错了:如下:

Failed to execute query: Duplicate entry '0' for key 'PRIMARY'
SQL: INSERT INTO log set LOGID = 'IN', LOG01 ='test', LOG02 ='127.0.0.1', DT999 = now()

这说明每次往表中插入记录的PRIMARY值均为0

问题描述:

修改前表的结构;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
SQL 查询结果
 
主机: localhost
数据库: minierp
生成日期: 2014 年 03 月 25 日 14:50
生成者: phpMyAdmin 2.10.3 / MySQL 6.0.4-alpha-community-log
SQL 查询: show create table log;
行数: 1 Table     Create Table
log CREATE TABLE `log` (
  `AUTOID` bigint(20) NOT NULL,
  `LOGID` varchar(20) NOT NULL DEFAULT '',
  `LOG01` varchar(20) NOT NULL DEFAULT '',
  `LOG02` varchar(40) NOT NULL DEFAULT '',
  `LOG03` varchar(40) NOT NULL DEFAULT '',
  `DT999` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  PRIMARY KEY (`AUTOID`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk COMMENT='操作记录表'

 log表的status:

1
2
3
4
5
6
7
8
9
SQL 查询结果
 
主机: localhost
数据库: minierp
生成日期: 2014 年 03 月 25 日 14:52
生成者: phpMyAdmin 2.10.3 / MySQL 6.0.4-alpha-community-log
SQL 查询: show table status like 'log';
行数: 1 Name  Engine  Version     Row_format  Rows    Avg_row_length  Data_length     Max_data_length     Index_length    Data_free   Auto_increment  Create_time     Update_time     Check_time  Collation   Checksum    Create_options  Comment
log InnoDB  10  Compact 5   3276    16384   0   0   0   NULL    2014-03-25 22:15:39 NULL    NULL    gbk_chinese_ci  NULL        操作记录表

 其中Auto_increment-值为NULL;

解决办法就是把其关键之设置为自增!

解决问题思路:
 

1
2
3
4
5
6
 1、老的表结构,使用的复合索引——“PRIMARY KEY (`AUTOID`)”,没有指定 auto_increment 的值;
  2、删除原来主键,重新创建新主键时(alter table log add primary key(AUTOID);
),也未指定 auto_increment的值,所以在创建了新主键后,再看表 log 的状态时, Auto_increment 一栏的值仍为 NULL
  3、mysql 不支持 “alter table sg_medal_action add auto_increment primary key(action_id);”这样的语句,请详看 alter 的语法 http://dev.mysql.com/doc/refman/5.0/en/alter-table.html ;
  4、解决问题
  mysql> ALTER TABLE `log` CHANGE `AUTOID` `AUTOID` BIGINT( 20 ) NOT NULL AUTO_INCREMENT;

 OK,问题解决了.

 

 

 

 

posted @   叉叉敌  阅读(785)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示