0

私は以下のようなテーブルを持っています

個人情報

CREATE TABLE personalInfo(userid BIGINT AUTO_INCREMENT PRIMARY KEY)

特許情報

CREATE TABLE patentInfo 
(
 userid BIGINT,
 patentId BIGINT AUTO_INCREMENT,
 FOREIGN KEY (userid) REFERENCES personalInfo(userid), 
 PRIMARY KEY (userid,patentId)
)

テーブルpatentInfoの作成中に、次のエラーが発生します

Incorrect table definition; there can be only one auto column and it must be defined as a key.

私がやりたいことは、ユーザーの特許を追加することです。だから私は as を使用patentIdAUTO_INCREMENT、 compiste の主キーをpatentId&の組み合わせとして保持しようとしていましuseridた。

どうすればこれを実現できますか?

更新 1:

patentId私の目的は、mysql クエリに挿入したくないということです。mysql 自体が次の番号を作成します。

4

4 に答える 4

1

Person代わりに使用しますuser-あなたがクリニックを持っているとしましょう...

  • PatientPerson
  • DoctorPerson
  • Doctorになるかもしれません(です)Patient

ここに画像の説明を入力してください

  • すべての一般的な個人情報をPerson
  • の患者固有の列のみPatient
  • で特定の医師のみDoctor
  • サブタイプは包括的であるため、識別子には{B=両方}があります。
  • 主キーがサブタイプテーブルにどのように伝播するかに注意してください。

要約すると、特定の例では、両方のテーブルがUserID主キーとして持つ必要があります。2番目の表では、これも外部キーです。

于 2012-07-04T12:32:28.903 に答える
1

patentIdisであるためAUTO_INCREMENT、 it を主キーにする必要があります。

于 2012-07-04T09:57:41.783 に答える
0

1 つのテーブルで値を自動インクリメントする必要はありません。そのため、データベースレベルでこれを行う代わりに、last_insert_id() またはそれに類似したものを使用して、コードレベルで Patentinfo テーブルにユーザー ID を手動で挿入する必要があります。

于 2012-07-04T09:57:20.117 に答える
0

auto_increment 列が主キーの最初の句である場合、1 つの auto_increment 列を持つ複合主キーを持つことができるようです。

以下は私のマシンで動作します

CREATE TABLE patentInfo 
(
  userid BIGINT,
  patentId BIGINT AUTO_INCREMENT,
  PRIMARY KEY (patentId, userid)
)

一方

PRIMARY KEY (userid, patentId)

あなたが見ているエラーを与えます。

MariaDB 10.0 YMMV でテスト済み

于 2013-03-30T19:54:23.767 に答える