0

MySQL MyISAM 数据库目前在一个表中有 2,280 行,在过去 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 设置为 '' 的插入有关,然后将其设置为下一个增量值,这会导致问题吗?

4

1 回答 1

0

尝试从 INSERT stmt 中取出 article_id 字段名称和值中的第一个 '';自动增量 ID 应自动分配。

于 2012-10-24T10:17:46.940 回答