如何让具有Auto_increment属性的列,1、能显示固定的位数。如自增时,系统是1 2 3 4 5 6 ……这样显示的,能否实现00001 00002 00003 00004 00005 00006 00007……这样显示? 2、如果一行被删除,则这个ID号能重新使用。如因某个原因,ID为3的行被删除,现重新又插入一行新的数据,ID仍为3,而不是接着最大的ID号进行。
DROP TABLE IF EXISTS `studentcj`;
CREATE TABLE `studentcj` (
  `ID` int(10) NOT NULL AUTO_INCREMENT,
  `biaozhi` char(6) CHARACTER SET utf8 NOT NULL COMMENT '识别码',
  `bj` char(2) DEFAULT NULL,
  `XH` char(2) DEFAULT NULL,
  `name` varchar(10) CHARACTER SET utf8 NOT NULL,
  `grade` char(4) CHARACTER SET utf8 DEFAULT NULL COMMENT '年级',
  `xueqi` varchar(8) CHARACTER SET utf8 DEFAULT NULL,
  `zf` int(4) DEFAULT NULL,
  `njmc` mediumint(4) DEFAULT NULL,
  `bjmc` mediumint(2) DEFAULT NULL,
  `yw` int(3) DEFAULT NULL COMMENT '语文',
  `ywbjmc` tinyint(2) DEFAULT NULL,
  `ywDC` char(1) DEFAULT NULL,
  `sx` int(3) DEFAULT NULL COMMENT '数学',
  `sxbjmc` tinyint(2) DEFAULT NULL,
  `sxDC` char(1) DEFAULT NULL,
  `yy` int(3) DEFAULT NULL COMMENT '英语',
  `yybjmc` tinyint(2) DEFAULT NULL,
  `yyDC` char(1) DEFAULT NULL,
  `wl` int(3) DEFAULT NULL COMMENT '物理',
  `wlbjmc` tinyint(2) DEFAULT NULL,
  `wlDC` char(1) DEFAULT NULL,
  `hx` int(3) DEFAULT NULL COMMENT '化学',
  `hxbjmc` tinyint(2) DEFAULT NULL,
  `hxDC` char(1) DEFAULT NULL,
  `sw` int(3) DEFAULT NULL COMMENT '生物',
  `swbjmc` tinyint(2) DEFAULT NULL,
  `swDC` char(1) DEFAULT NULL,
  `ls` int(3) DEFAULT NULL COMMENT '历史',
  `lsbjmc` tinyint(2) DEFAULT NULL,
  `lsDC` char(1) DEFAULT NULL,
  `zz` int(3) DEFAULT NULL COMMENT '政治',
  `zzbjmc` tinyint(2) DEFAULT NULL,
  `zzDC` char(1) DEFAULT NULL,
  `dl` int(3) DEFAULT NULL COMMENT '地理',
  `dlbjmc` tinyint(2) DEFAULT NULL,
  `dlDC` char(1) DEFAULT NULL,
  `kstime` varchar(10) CHARACTER SET utf8 DEFAULT NULL COMMENT '考试时间',
  `ksname` varchar(40) CHARACTER SET utf8 DEFAULT NULL COMMENT '考试名称',
  `changetime` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '本行数据修改时间',
  `begintime` date DEFAULT NULL,
  PRIMARY KEY (`ID`),
  KEY `biaozhi` (`biaozhi`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=63738 DEFAULT CHARSET=latin1;-- ----------------------------
-- Records of studentcj
-- ----------------------------
INSERT INTO `studentcj` VALUES ('1', '100253', '1', null, '丁11', '高一', '第一学期', '375', null, '1', '120', '2', 'A', '145', '2', 'A', '110', '1', 'A', '120', '1', 'A', '116', '2', 'A', '94', '15', 'A', '86', '24', 'A', '100', '2', 'A', '103', null, null, '2011.01', '高一第一学期期末考试', '2012-10-29 21:28:49', null);
INSERT INTO `studentcj` VALUES ('2', '100895', '1', null, '李22', '高一', '第一学期', '362', null, '2', '114', '10', 'A', '139', '9', 'A', '109', '2', 'A', '120', '1', 'A', '116', '2', 'A', '103', '3', 'A', '97', '4', 'A', '99', '3', 'A', '106', null, null, '2011.01', '高一第一学期期末考试', '2012-10-29 21:28:49', null);
INSERT INTO `studentcj` VALUES ('3', '101024', '1', null, '王34', '高一', '第一学期', '362', null, '2', '114', '10', 'A', '142', '4', 'A', '106', '7', 'A', '115', '21', 'A', '104', '6', 'A', '107', '1', 'A', '92', '12', 'A', '97', '10', 'A', '110', null, null, '2011.01', '高一第一学期期末考试', '2012-10-29 21:28:49', null);
INSERT INTO `studentcj` VALUES ('4', '101657', '1', null, '韩32', '高一', '第一学期', '359', null, '4', '115', '7', 'A', '145', '2', 'A', '99', '31', 'A', '117', '12', 'A', '67', '46', 'B', '98', '7', 'A', '99', '3', 'A', '81', '47', 'B', '99', null, null, '2011.01', '高一第一学期期末考试', '2012-10-29 21:28:49', null);

解决方案 »

  1.   

    1、
    CREATE TABLE `auto` (                                     
              `id` int(4) unsigned zerofill NOT NULL auto_increment)
    2、备份数据后->TRUNCATE TT->导入数据
    OR
    将数据插入另1个有自增字段的表,再导回来
      

  2.   

    查询中处理一下即可,或者直接在你的显示程序中处理。 select right(100000+id,6)
      

  3.   

    删除最后一行的话可以设置auto_increment的值从删除的那个id开始增长,如从中间或开头怎木有办法,可以采用1楼的办法
      

  4.   

    1楼的办法蛮好。至于已经删掉的行的ID值,你如果真想弄成新插入的值等于最小删除的ID值,可以用一张辅表来记录。
    删除时,往辅表插入一条。
    插入时,从辅表里找到最小的,有则取,并删除。没有则用自增值。