2

我有一个有AUTO_INCREMENT字段的表。目前,它也是一个 PRIMARY KEY。

但是,在某些情况下,我需要此AUTO_INCREMENT列来允许重复。换句话说 - 两个不同的行可以在AUTO_INCREMENT列内具有相同的值。这意味着有一个不是 PRIMARY KEY 的 AUTO_INCREMENT 字段。

这可能吗?

我猜不是,因为每当我尝试这样做时,都会收到此错误:

ERROR 1075 (42000) at line 130: Incorrect table definition; there can be only one auto column and it must be defined as a key

我喜欢使用 AUTO_INCREMENT 字段,因为它使我不必手动存储/递增数据库中其他地方的单独计数器。我可以插入表格并获取插入的值。但是,如果我不能有重复项,我似乎将无法使用单独的表来跟踪和手动增加该字段。

更新:作为一个快速澄清,我已经熟悉将 AUTO_INCREMENT 字段与另一个键分组,如此处所述。让我们假设这个解决方案由于数据库中的其他约束而无法工作。

4

2 回答 2

5

MySQL 中的自增字段必须是(即索引)的一部分,但不一定是主键或唯一键的一部分。

CREATE TABLE mytable (
  id   INT PRIMARY KEY,
  otto INT AUTO_INCREMENT,
  KEY (otto)
);

-- allow the auto-increment to generate a value

INSERT INTO mytable (id, otto) VALUES (123, DEFAULT);

SELECT * FROM mytable;

> 123, 1

-- specify a duplicate value, overriding the auto-increment mechanism

INSERT INTO mytable (id, otto) VALUES (456, 1); 

SELECT * FROM mytable;

> 123, 1
> 456, 1

-- allow the auto-increment to generate another value

INSERT INTO mytable (id, otto) VALUES (789, DEFAULT);

SELECT * FROM mytable;

> 123, 1
> 456, 1
> 789, 2
于 2009-05-28T18:07:24.133 回答
2

听起来像“子任务”是一个表,“任务”有一个 FK 引用。也就是说,如果子任务被重用。

OTOH,如果一个任务可以有许多子任务,并且一个子任务可以链接到多个任务,那么您将在单独的表中查看多对多。

在任何一种情况下,我都不认为您希望数据库自动生成这些“链接 ID”。

于 2009-05-28T18:02:19.497 回答