自动增量的mysql问题

时间:2013-11-29 06:22:15

标签: mysql auto-increment

我有一个mysql数据库,其中包含以下表格:

create table post
(
id int primary key auto_increment,
group_id int,
post varchar(2000),
person_id int,
foreign key(person_id) references person(person_id) on update cascade on delete cascade,
foreign key(group_id) references groups(group_id) on update cascade on delete cascade
);
create table comment
(
id int primary key auto_increment,
p_id int,
person_id int,
comment varchar(2000),
foreign key(p_id) references post(id) on update cascade on delete cascade,
foreign key(person_id) references person(person_id) on update cascade on delete cascade
);

此处帖子ID和评论ID未正确递增。我创建并删除了这些表多次,并且每次将初始id作为一个随机值并且每个insert都采用任意随机值。

例如。它有时需要552,有时需要3。

我还在mysql命令行上检查了以下内容:

show variables like 'auto_inc%';

并且值auto_increment_increment和auto_increment_offset都设置为1.

对此有任何帮助,因为这是关键的商业工作。

1 个答案:

答案 0 :(得分:0)

我不知道这是否会解决您的问题,因为您的插入语句引用了其他两个表(persongroups),这些表未在您的代码中显示(所以我不知道那些表格会怎么样。)

但是,既然你写了

  

对此有任何帮助,因为这是关键的商业工作。

...这里有一些帮助/建议:

我不确定这些表是如何成功创建的,因为我在尝试该代码时遇到了很多错误(但这不是重点),但是这里和#39;一种更有效的方法(注意:我只能假设对表person的引用而groups表示那些 表已存在):

编辑:创建表后首先尝试此操作:

FLUSH TABLES;
ALTER TABLE `comment` AUTO_INCREMENT = 1;
ALTER TABLE `post` AUTO_INCREMENT = 1;

如果这没有帮助,这就是上面提到的更有效的方法:

CREATE TABLE `comment` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `p_id` int(11) DEFAULT NULL,
  `person_id` int(11) DEFAULT NULL,
  `comment` varchar(2000) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `p_id` (`p_id`),
  KEY `person_id` (`person_id`)
);

CREATE TABLE `post` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `group_id` int(11) DEFAULT NULL,
  `post` varchar(2000) DEFAULT NULL,
  `person_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `group_id` (`group_id`),
  KEY `person_id` (`person_id`)
);

ALTER TABLE `comment`
  ADD CONSTRAINT `comment_fk_1`
  FOREIGN KEY (`p_id`)
  REFERENCES `post` (`id`)
  ON DELETE CASCADE
  ON UPDATE CASCADE;

ALTER TABLE `comment`
  ADD CONSTRAINT `comment_fk_2`
  FOREIGN KEY (`person_id`)
  REFERENCES `person` (`person_id`)
  ON DELETE CASCADE
  ON UPDATE CASCADE;

ALTER TABLE `post`
  ADD CONSTRAINT `post_fk_1`
  FOREIGN KEY (`person_id`)
  REFERENCES `comment` (`person_id`)
  ON DELETE CASCADE
  ON UPDATE CASCADE;

ALTER TABLE `post`
  ADD CONSTRAINT `post_fk_2`
  FOREIGN KEY (`group_id`)
  REFERENCES `groups` (`group_id`)
  ON DELETE CASCADE
  ON UPDATE CASCADE;