Определение идет внутри оператора создания таблицы:
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 <> скрипка.