ошибка при создании таблицы с внешним ключом - PullRequest
0 голосов
/ 02 июня 2018
CREATE TABLE location (
  uid int not null auto_increment primary key,
  name varchar(255) NOT NULL,
  `state_uid` int not null,
  FOREIGN KEY location(state_uid)
  REFERENCES state(uid)
  ON UPDATE CASCADE
  ON DELETE RESTRICT,
  `city_uid` int not null,
  FOREIGN KEY location(city_uid)
  REFERENCES city(uid)
  ON UPDATE CASCADE
  ON DELETE RESTRICT,
  `area_uid` int not null,
  FOREIGN KEY location(area_uid)
  REFERENCES area(uid)
  ON UPDATE CASCADE
  ON DELETE RESTRICT
);

Ответы [ 2 ]

0 голосов
/ 02 июня 2018

Ваша версия почти в порядке.Проблема заключается в location в ссылке на внешний ключ.

У вас нет проблем с каскадированием или упорядочением столбцов.Итак, это работает:

CREATE TABLE location (
  uid int not null auto_increment primary key,
  name varchar(255) NOT NULL,
  `state_uid` int not null,
  FOREIGN KEY (state_uid) REFERENCES state(uid) ON UPDATE CASCADE ON DELETE RESTRICT,
  `city_uid` int not null,
  FOREIGN KEY (city_uid) REFERENCES city(uid) ON UPDATE CASCADE ON DELETE RESTRICT,
  `area_uid` int not null,
  FOREIGN KEY (area_uid) REFERENCES area(uid) ON UPDATE CASCADE ON DELETE RESTRICT
);

Здесь - это скрипта SQL.

Обратите внимание, что часто принято ставить явные foreign key (и другие ограничения) послеВ определениях столбцов для этого нет правила или стандарта.Фактически, большинство баз данных поддерживают встроенные определения внешнего ключа.Однако MySQL этого не делает.

0 голосов
/ 02 июня 2018
CREATE TABLE location  (
  uid int not null auto_increment primary key,
  name varchar(255) NOT NULL,
  state_uid int not null, 
  city_uid int not null,
  area_uid int not null,

  CONSTRAINT fk_state FOREIGN KEY (state_uid)  REFERENCES state(uid)  ,
  CONSTRAINT fk_city  FOREIGN KEY (city_uid)  REFERENCES city(uid)  ,
  CONSTRAINT fk_area FOREIGN KEY (area_uid)  REFERENCES area(uid)   
);

Попробуйте этот запрос

убедитесь, что родительские таблицы существуют

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