MySQL错误 - 已使用的未使用的主键值返回

时间:2012-10-22 08:35:39

标签: mysql

目前在一个表中有2,280行的MySQL MyISAM数据库在过去6个月左右被锁定了两次。

当尝试添加新行时,它会显示“已使用主键”,当下一个增量值高于表中的最后一个ID时。当我重置自动增量时似乎自我修复。

数据库适用于每天点击次数超过200次的网站,每小时约25-20次,所以无法想象它是由于数据库过载造成的。

试图弄清楚为什么会这种情况发生,以及我是否可以解决问题,以便客户无需在无法向其网站添加新文章时继续调用。

编辑:只是为了抢占潜在的评论,我意识到表和代码并不理想,但我不是在寻找我应该改进的方法,除非它是问题的根本原因,性能/安全性差我能与(只)一起生活,但我确实需要弄清楚是什么原因导致它锁定表格。感谢。

表定义

CREATE TABLE `articles` (
  `article_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `article_meta_desc` text,
  `article_meta_keyw` text,
  `article_title` varchar(255) DEFAULT NULL,
  `article_date` int(10) unsigned DEFAULT NULL,
  `article_intro` text,
  `article_embed` text,
  `article_content` text,
  `article_sector` varchar(255) DEFAULT NULL,
  `article_type` varchar(255) DEFAULT NULL,
  `article_ma` tinyint(1) unsigned DEFAULT NULL,
  `article_pn` tinyint(1) unsigned DEFAULT NULL,
  `article_cw` tinyint(1) unsigned DEFAULT NULL,
  `article_er` tinyint(1) unsigned DEFAULT NULL,
  `article_kr` tinyint(1) unsigned DEFAULT NULL,
  `article_rc` tinyint(1) unsigned DEFAULT NULL,
  `article_rs` tinyint(1) DEFAULT NULL,
  `article_img_s` varchar(255) DEFAULT NULL,
  `article_img_l` varchar(255) DEFAULT NULL,
  `article_link` varchar(255) DEFAULT NULL,
  `article_highlight` int(10) unsigned DEFAULT NULL,
  `article_slug` text,
  `article_alias` text,
  `article_hide` smallint(1) unsigned NOT NULL DEFAULT '0',
  `article_ad_layout` tinyint(1) unsigned DEFAULT '0',
  `article_ad_banner` smallint(5) unsigned DEFAULT NULL,
  `article_ad_sky` smallint(5) unsigned DEFAULT NULL,
  `article_ad_square1` smallint(5) unsigned DEFAULT NULL,
  `article_ad_square2` smallint(5) unsigned DEFAULT NULL,
  `article_ad_square3` smallint(5) unsigned DEFAULT NULL,
  `article_newswire` smallint(1) unsigned NOT NULL DEFAULT '0',
  PRIMARY KEY (`article_id`),
  FULLTEXT KEY `full_text` (`article_title`,`article_intro`,`article_content`)
) ENGINE=MyISAM AUTO_INCREMENT=2384 DEFAULT CHARSET=latin1 CHECKSUM=1 DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC;

_ma,_pn,_cw,_er,_kr,_rc,_rs用于显示哪些类别文章用于。请忽略广告和网站表格的不当使用,网站很久以前制作,我从那以后学到了更好:p

插入声明

INSERT INTO articles (article_id, article_meta_desc, article_meta_keyw, article_title, article_date, article_intro, article_embed, article_content, article_sector, article_type, article_ma, article_pn, article_cw, article_er, article_kr, article_rc, article_rs, article_img_s, article_img_l, article_link, article_highlight, article_slug, article_alias, article_hide)
VALUES ('','$insert_article_meta_desc','$insert_article_meta_keyw','$insert_article_title','$insert_article_date','$insert_article_intro','$insert_article_embed','$insert_article_content','$insert_article_sector','$insert_article_category','$insert_article_ma','$insert_article_pn','$insert_article_cw','$insert_article_er','$insert_article_kr','$insert_article_rc','$insert_article_rs','$insert_article_img_s','$insert_article_img_l','','$insert_article_highlight','$insert_article_slug','','$insert_article_hide')

再次,旧网站,请原谅我。不确定是否与执行插入操作有关,该插入将id设置为'',然后将其设置为下一个增量值,这是否会导致问题?

1 个答案:

答案 0 :(得分:0)

尝试从INSERT stmt中取出article_id字段名称,并首先取出值中的值;应自动分配自动增量ID。