Mysql插入查询返回ERROR 1062 (23000) : Duplicate entry '2147483647' for key 'PRIMARY'

标签 mysql sql-insert

我注意到在数据库中插入查询期间出现错误。

mysql> insert into users (name) values ('Gepp');

返回:

ERROR 1062 (23000): Duplicate entry '2147483647' for key 'PRIMARY'

这是我第一次收到此错误,也许这表明已达到某种限制。无论如何,我已经检查了其他帖子提示同样的错误,并发现触发器可能是问题所在。不幸的是事实并非如此:

mysql> SHOW triggers;
Empty set (0.00 sec)

编辑 我的用户表的结构如下所示:

> *************************** 1. row ***************************
  Field: uid
   Type: int(11)
   Null: NO
    Key: PRI
Default: NULL
  Extra: auto_increment
*************************** 2. row ***************************
  Field: name
   Type: varchar(50)
   Null: NO
    Key: 
Default: NULL
  Extra: 
*************************** 3. row ***************************
  Field: email
   Type: varchar(100)
   Null: NO
    Key: UNI
Default: NULL
  Extra: 
*************************** 4. row ***************************
  Field: encrypted_password
   Type: varchar(80)
   Null: NO
    Key: 
Default: NULL
  Extra: 
*************************** 5. row ***************************
  Field: salt
   Type: varchar(10)
   Null: NO
    Key: 
Default: NULL
  Extra: 
*************************** 6. row ***************************
  Field: descrizione
   Type: varchar(600)
   Null: YES
    Key: 
Default: NULL
  Extra: 
*************************** 7. row ***************************
  Field: motto
   Type: varchar(100)
   Null: NO
    Key: 
Default: 
  Extra: 
*************************** 8. row ***************************
  Field: status
   Type: varchar(100)
   Null: NO
    Key: 
Default: Hey new gambler! Share your thoughts!
  Extra: 
*************************** 9. row ***************************
  Field: game
   Type: varchar(100)
   Null: NO
    Key: 
Default: 
  Extra: 
*************************** 10. row ***************************
  Field: pokeroom
   Type: varchar(100)
   Null: NO
    Key: 
Default: 
  Extra: 
*************************** 11. row ***************************
  Field: score
   Type: int(11)
   Null: NO
    Key: 
Default: 0
  Extra: 
*************************** 12. row ***************************
  Field: created_at
   Type: datetime
   Null: YES
    Key: 
Default: NULL
  Extra: 
*************************** 13. row ***************************
  Field: updated_at
   Type: datetime
   Null: YES
    Key: 
Default: NULL
  Extra: 
*************************** 14. row ***************************
  Field: photo
   Type: varchar(500)
   Null: NO
    Key: 
Default: 
  Extra: 
*************************** 15. row ***************************
  Field: panorama
   Type: varchar(500)
   Null: NO
    Key: 
Default: 
  Extra:

如何解决这个问题?

最佳答案

谢谢各位的帮助! table 的配置有问题。 uid 列具有主键和 auto_increment 属性,但在我正在处理的项目中,用户是使用如下查询创建的:

INSERT INTO users(uid, name, email, encrypted_password, salt, created_at) VALUES('12342354355.54534543','bollo','sai','dsfsd','sdsdf','23')

uid 是由 PHP 函数 uniqid("",true) 生成的,这导致了问题

    select uid,id from users;
+------------+----+
| uid        | id |
+------------+----+
|        183 |  1 |
|       5224 |  2 |
|       5228 |  3 |
|      52288 |  4 |
|     515620 |  5 |
|     519030 |  6 |
|    5156147 |  8 |
|    5156151 |  9 |
|    5156205 | 10 |
|    5157726 | 11 |
|   52289002 | 12 |
|  515615576 | 13 |
| 2147483647 | 14 |
+------------+----+
15 rows in set (0.00 sec)

正如您所看到的,由像上面这样的查询创建的新 uid 始终大于前一个。可能 auto_increment 只接受大于最后插入的值的 uid 值。我很幸运,注册了14次,然后uid值超出了列定义允许的最大值,导致了错误。

我通过从 uid 列中删除 Primary_Key 解决了这个问题:

alter table users drop primary key;

再次修改,去掉auto_increment属性:

alter table users modify uid varchar(40) not null unique;

最后添加了一个名为 id 的新列,以便跟踪和统计用户注册:

alter table users add id int(11) not null auto_increment primary key;

最终,该错误是由数据库及其作用的函数的组织不当引起的。我的错!

关于Mysql插入查询返回ERROR 1062 (23000) : Duplicate entry '2147483647' for key 'PRIMARY' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18643648/

相关文章:

mysql - 从 .sql 备份恢复 MySQL 数据库失败 : mysql. proc 表不存在

php - 插入 php post vars 时的 sql 语法错误

python - 尝试通过 python 插入时出现 SQL 语法错误

sql - 在 Azure SQL 数据库中使用 "INSERT INTO"SQL 查询时出错

database - 拉维尔 5.2 : Handling database insertions using the Laravel Queues service

mysql - 是否有时联结表会增加不必要的复杂性?

mysql - SQL语句仅获取表的最新连接条目

MySQL连接表到查询中,与其他人没有引用

php - 如何使用准备好的语句插入多行

mysql - 如何从 MySQL 中提取多列,其中一列是唯一值