1

私は2つのテーブルを持っています:

  1. インシデント:

    CREATE TABLE incidencies
      (
         id_inc     INT(7) ZEROFILL NOT NULL auto_increment PRIMARY KEY,
         empresa    VARCHAR(40),
         maquina    VARCHAR(20),
         tipus_inc  VARCHAR(20),
         estat_mon  VARCHAR(20),
         estat_inc  VARCHAR(20),
         dia_inc    DATE,
         hora_inc   TIME,
         descripcio VARCHAR(200)
      )
    CHARACTER SET utf8
    engine=innodb;
    
  2. コメント:

    CREATE TABLE comentaris
      (
         id_inc    INT(7) ZEROFILL NOT NULL,
         id_com    INT(3) ZEROFILL NOT NULL auto_increment,
         data_com  DATE,
         hora_com  TIME,
         comentari VARCHAR(999),
         PRIMARY KEY(id_inc, id_com),
         FOREIGN KEY (id_inc) REFERENCES incidencies (id_inc) ON DELETE CASCADE ON
         UPDATE CASCADE
      )
    CHARACTER SET utf8
    engine=innodb; 
    

ご覧のとおり、 on COMENTARIStableID_INCは外部キーで、元は auto_incremental ですが、もう on ではありませんCOMENTARIS

ここで、フィールドをID_COMauto_incremental にして、両方を主キーにします。

テーブルは次のようになります。

ID_INC | ID_COM
001 | 001
001 | 002
001 | 003
002 | 004
003 | 005

問題は、MySQL がID_INCauto_incremental フィールドとして検出したように見えることです。これはもうテーブルにはありません。COMENTARIS

ID_COMauto_incrementalを作成しようとすると、次のエラー メッセージが表示されます。

エラー 1075 (42000): テーブル定義が正しくありません。自動列は 1 つしか存在できず、キーとして定義する必要があります

データベースはエンジンである必要がありますInnoDB

解決策はありますか?

4

1 に答える 1

0

この問題は外部キーとは関係ありません。実行するコードがこれだけの場合:

CREATE TABLE comentaris
(
    id_inc    INT(7) ZEROFILL NOT NULL,
    id_com    INT(3) ZEROFILL NOT NULL auto_increment,
    PRIMARY KEY(id_inc, id_com)
)
engine=innodb; 

...それでも同じエラーが発生します。

AUTO_INCREMENTonを使用できるようにするには、 が最初のアイテムまたは唯一のアイテムid_comであるキーが必要です。これまでのところ、2 番目id_comの項目である主キーしかありません。MySQL はこの目的でそのインデックスを使用できないため、これでは十分ではありません。id_com

タイプミスがあり、本当にこれが欲しいという印象があります。

CREATE TABLE comentaris
(
    id_inc    INT(7) ZEROFILL NOT NULL,
    id_com    INT(3) ZEROFILL NOT NULL auto_increment,
    PRIMARY KEY(id_com)
)
engine=innodb; 
于 2013-04-29T16:57:18.110 に答える