# 1005 - Невозможно создать таблицу `agenceassurance``operation` (ошибка: 150" Неправильно сформировано ограничение внешнего ключа ") - PullRequest
0 голосов
/ 09 мая 2018

errno: 150 «Ограничение внешнего ключа сформировано неправильно»)

DROP DATABASE IF EXISTS AgenceAssurance;
CREATE DATABASE IF NOT EXISTS AgenceAssurance;
USE AgenceAssurance;

CREATE TABLE Logininfo (
  idLogin    INT(3)  PRIMARY KEY  NOT NULL AUTO_INCREMENT,
  userName       VARCHAR(50) NOT NULL,
  pass       VARCHAR(50),
  usertype   VARCHAR(50)          DEFAULT NULL,
  GrantedKey VARCHAR(8)           DEFAULT NULL
)ENGINE = InnoDB;

CREATE TABLE Operation (
  idOpt    INT PRIMARY KEY  NOT NULL AUTO_INCREMENT,
  libelOpt TEXT,
  dateOpt  DATETIME DEFAULT now(),
  userName VARCHAR(50),
   CONSTRAINT fk_login FOREIGN KEY (userName) REFERENCES Logininfo (userName)
)ENGINE = InnoDB;

Error SQL-запрос:

CREATE TABLE Operation (
  idOpt    INT PRIMARY KEY  NOT NULL AUTO_INCREMENT,
  libelOpt TEXT,
  dateOpt  DATETIME DEFAULT now(),
  userName VARCHAR(50),
  CONSTRAINT fk_login FOREIGN KEY (userName) REFERENCES Logininfo (userName)
)ENGINE = InnoDB

MySQL сказал:

1005 - Невозможно создать таблицу agenceassurance. operation (ошибка: 150 "Неправильно сформировано ограничение внешнего ключа") (Подробно ...)

Ответы [ 2 ]

0 голосов
/ 09 мая 2018

Поле userName в Logininfo таблица должна быть УНИКАЛЬНОЙ. Вы можете иметь только внешний ключ, ссылающийся на уникальное поле.

Так же, как это:

userName VARCHAR(50) NOT NULL UNIQUE
0 голосов
/ 09 мая 2018

CONSTRAINT pk_Log ПЕРВИЧНЫЙ КЛЮЧ (idLogin, userName): попробуйте как ниже: CONSTRAINT pk_Log ПЕРВИЧНЫЙ КЛЮЧ (userName) потому что: одновременно два поля с PK, нельзя использовать как FK.

...