phpMyAdmin: невозможно установить конкретный внешний ключ, даже если типы совпадают - PullRequest
1 голос
/ 14 октября 2011

Моя таблица list_items имеет следующие столбцы

  • `ListID`
  • `WordID`

Моя таблица списков имеет первичный, автоматически увеличивающийся первичный ключ `ListID`. Я хочу сделать `ListID` в list_items внешним ключом, ссылающимся на первичный ключ в списках, но я получаю ошибку:

Ошибка создания внешнего ключа в `ListID` (проверьте типы данных).

Оба столбца имеют тип int (8), а оба типа таблиц - InnoDB. В чем может быть проблема?

После этих инструкций отлично работал при настройке других внешних ключей.

Единственное, о чем я могу думать, это на главном экране phpMyAdmin, там есть сообщение:

"Дополнительные функции для работы со связанными таблицами были отключены. Чтобы выяснить, почему нажмите здесь."

Но разве никакая проблема не помешает мне настроить другие внешние ключи?

Соответствующий SQL:

--
-- Table structure for table `lists`
--

CREATE TABLE IF NOT EXISTS `lists` (
  ```ListID``` int(8) NOT NULL AUTO_INCREMENT,
  ```UserID``` int(8) NOT NULL,
  ```privacy``` varchar(25) NOT NULL,
  ```name``` varchar(50) NOT NULL,
  ```description``` text NOT NULL,
  ```date created``` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  ```date modified``` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  PRIMARY KEY (```ListID```),
  KEY ```UserID``` (```UserID```)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

--
-- Dumping data for table `lists`
--

--
-- Table structure for table `list_items`
--

CREATE TABLE IF NOT EXISTS `list_items` (
  ```ListID``` int(8) NOT NULL,
  ```WordID``` int(8) NOT NULL,
  KEY ```ListID``` (```ListID```),
  KEY ```WordID``` (```WordID```)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Dumping data for table `list_items`
--

--
-- Table structure for table `users`
--

CREATE TABLE IF NOT EXISTS `users` (
  ```UserID``` int(8) NOT NULL AUTO_INCREMENT,
  ```email``` int(50) NOT NULL,
  ```username``` int(25) NOT NULL,
  ```password``` int(25) NOT NULL,
  ```join date``` int(11) NOT NULL,
  PRIMARY KEY (```UserID```)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

Ответы [ 2 ]

2 голосов
/ 14 октября 2011

у вас очень много бэктиков в вашем sql обычно у вас будет только 1 комплект, который может вызвать проблемы

пример

CREATE TABLE IF NOT EXISTS `list_items` (
  `ListID` int(8) NOT NULL,
  `WordID` int(8) NOT NULL,
  KEY `ListID` (`ListID`),
  KEY `WordID` (`WordID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
0 голосов
/ 14 октября 2011

Я попробовал это вручную с этим ниже, на внешнем ключе был создан отлично

ALTER TABLE list_items ADD FOREIGN KEY fk_ListID (ListID) REFERENCES lists(ListID);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...