2013-05-07 46 views
0

我有一个不同的领域,包括一个主键,id,这是一个表自动递增:插入新项目到一个已填充表

+-------------------------------+------------------+------+-----+---------+ 
| Field       | Type    | Null | Key | Default | Extra 
+-------------------------------+------------------+------+-----+---------+ 
| id        | tinyint(11)  | NO | PRI | NULL | auto_increment 

表已填充了114个项目:

mysql> select count(*) as cnt from beer; 
+-----+ 
| cnt | 
+-----+ 
| 114 | 
+-----+ 

而我试图插入一组新的项目到表中。我没有明确插入一个ID密钥。下面是一个示例查询:

mysql> INSERT INTO beer (name, type, alcohol_by_volume, description, image_url) 
    VALUES('Test Ale', 1, '4.6', '', 'https://untappd.s3.amazonaws.com/site/assets/images/temp/badge-beer-default.png'); 

尝试手动插入查询时,我得到以下错误(插入实际上是一个PHP脚本来完成相同的结果):

ERROR 1062 (23000): Duplicate entry '127' for key 1 

这是怎么回事?我认为插入后id会自动增加。我应该注意到,前13条由于某种原因是空白/空的,最后一个键现在是127.(这不是我的表 - 我只是写脚本)。

+0

可能有人改变了自动增量的值('ALTER TABLE表名AUTO_INCREMENT = 127;' – jcho360 2013-05-07 16:34:12

回答

4

Tiny int不是auto_increment主键的不错选择...范围只是(-128 ... 127)。通常它被用作标志;你需要使用unsigned int

1

尝试重置主键的自动递增手动使用此:

ALTER TABLE `beer` AUTO_INCREMENT = 128;