MySQL外键参考语法

时间:2019-02-09 14:42:52

标签: mysql database phpmyadmin

我在Windows PC上使用XAMPP服务器。最近,我正在学习和使用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;

我的数据库中还有一个名为用户的表。当我执行上面的查询时,我得到一个错误,就像这样:

  

错误[1064]:MySQL语法不正确对应于您的MariaDB文档。

如果语法有问题,请纠正我!

我们将非常感谢您的帮助。上面的查询应该用PHP My Admin编写。

P.S.(如果发现任何错误,请随时进行编辑)

1 个答案:

答案 0 :(得分:0)

定义在创建表语句内

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个数字。

通常,外键被赋予名称。另外,我建议:

  • 每个表都有自己的ID,以该表命名(即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

Here是db <>小提琴。