我注意到在数据库中插入查询期间出现错误。
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/