Синтаксис ссылки на внешний ключ MySQL - PullRequest
0 голосов
/ 09 февраля 2019

Я использую сервер XAMPP на ПК с Windows.Недавно я изучал реляционные таблицы MySQL и работал с ними.Я создавал запрос MySQL для создания таблицы со ссылкой на внешний ключ.Мой код выглядит следующим образом:

 CREATE TABLE loginattempts (
  id int(16) NOT NULL,
  loginattempts tinyint(9) NOT NULL,
  attemptdate DATETIME NOT NULL
)
FOREIGN KEY (id) REFERENCES users(id)
ON DELETE CASCADE
ON UPDATE CASCADE
ENGINE = INNODB;

У меня есть другая таблица с именем users в моей БД.Когда я выполняю вышеуказанный запрос, я получаю сообщение об ошибке, похожее на это:

Ошибка [1064]: синтаксис MySQL неверен Соответствует вашей документации MariaDB.

Isчто-то не так в моем синтаксисе, если так, пожалуйста, исправьте меня!

Помощь будет высоко оценена.Вышеупомянутый запрос должен быть написан на PHP My Admin.

PS (Если вы обнаружите какие-либо ошибки, не стесняйтесь редактировать)

1 Ответ

0 голосов
/ 09 февраля 2019

Определение идет внутри оператора создания таблицы:

CREATE TABLE loginattempts (
  id int(16) NOT NULL,
  loginattempts tinyint(9) NOT NULL,
  attemptdate DATETIME NOT NULL,
  FOREIGN KEY (id) REFERENCES users(id)
    ON DELETE CASCADE
    ON UPDATE CASCADE
) ENGINE = INNODB;

int(16) и tinyint(9) на самом деле не имеют смысла.Целое число имеет до 10 возможных цифр в своем представлении и от tinyint до 3.

Часто внешним ключам присваиваются имена.Кроме того, я рекомендую:

  • Каждая таблица имеет свой собственный идентификатор, названный в честь таблицы (т. Е. userId вместо id).
  • Внешние ключи имеют то же имяв качестве первичного ключа, где это возможно.
  • У ограничений есть имена.

Итак, я бы предложил:

CREATE TABLE loginattempts (
  loginAttemptId int auto_increment primary key,
  userId int NOT NULL,
  loginattempts tinyint NOT NULL,
  attemptdate DATETIME NOT NULL,
  CONSTRAINT fk_loginattempts_userid FOREIGN KEY (userId) REFERENCES users(userId)
    ON DELETE CASCADE
    ON UPDATE CASCADE
) ENGINE = INNODB;

Конечно, это требует изменения users таблица, поэтому первичный ключ - userId, а не id.

Здесь - это db <> скрипка.

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