2

フィールドを持つテーブルがありAUTO_INCREMENTます。現在、これは PRIMARY KEY でもあります。

AUTO_INCREMENTただし、重複を許可するためにこの列が必要な場合があります。つまり、2 つの異なる行が列内で同じ値を持つことができ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 タスクに多くのサブタスクを含めることができ、サブタスクを複数のタスクにリンクできる場合は、別のテーブルで多対多を見ています。

どちらの場合でも、DB がこれらの「リンクされた ID」を自動生成する必要はないと思います。

于 2009-05-28T18:02:19.497 に答える