Как исправить ошибку индекса при создании внешнего ограничения - PullRequest
0 голосов
/ 29 марта 2019

Я пытаюсь создать два отношения с помощью MySQL, в то время как я создавал второе отношение "t2", я добавил внешнее ограничение к первому отношению "t1".

Первая таблица «t1» была успешно построена, но она показала «Код ошибки: 1822. Не удалось добавить ограничение внешнего ключа. Отсутствует индекс для ограничения« FK2 »в ссылочной таблице« t1 »» при создании второй стол "т2".

Я проверил некоторые проблемы, такие как моя, в некоторых решениях атрибут, на который ссылаются в первой таблице, должен быть уникальным или первичным ключом. Но «Пн» уже был ПК в первой таблице.

Что не так в моем коде?

create table t1
( Num       INT(10)        NOT NULL,
  Mon       VARCHAR(7)        NOT NULL,

  CONSTRAINT PK1 PRIMARY KEY (Num, Mon)
);

CREATE TABLE t2
( Num        INT(10)        NOT NULL,
  Mon       VARCHAR(7)        NOT NULL,
  Totle_Income        Decimal(9,2)   DEFAULT 0,
  CONSTRAINT PK2 PRIMARY KEY (Num, Mon),
  CONSTRAINT FK1 FOREIGN KEY (Num) REFERENCES t1(Num)
                       ON DELETE CASCADE      ON UPDATE CASCADE,
  CONSTRAINT FK2 FOREIGN KEY (Mon) REFERENCES t1(Mon)
                       ON DELETE CASCADE       ON UPDATE CASCADE
 );

Ответы [ 2 ]

1 голос
/ 29 марта 2019

t1.mon является только вторым компонентом первичного ключа и, следовательно, только вторым компонентом индекса. Это бесполезно индексировать t1.mon, он должен быть первым или единственным компонентом индекса.

Но вы, вероятно, хотите сослаться на полный ключ. Таким образом, ограничение внешнего ключа должно включать оба столбца, а не иметь два ограничения для каждой части ключа.

...
CONSTRAINT FK1
           FOREIGN KEY (Num,
                        Mon)
                       REFERENCES t1
                                  (Num,
                                   Mon)
                       ON DELETE CASCADE
                       ON UPDATE CASCADE,
...
0 голосов
/ 29 марта 2019

t1.mon не является уникальным и, следовательно, не может называться Foreign_key

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...