MySQL 外键引用语法

标签 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;

我的数据库中有另一个名为 users 的表。当我执行上面的查询时,我收到一个错误,如下所示:

Error [1064]: MySQL Syntax not correct Correspond to your MariaDB Documentation.

我的语法有什么问题吗,如果有请纠正我!

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

P.S.(如有错误欢迎指正)

最佳答案

定义位于创建表语句内部:

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是一个数据库<> fiddle 。

关于MySQL 外键引用语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54607287/

相关文章:

php - 比较从表中获取的数据时出错

mysql - 能够通过 SSH 上的标准 TCP/IP 连接到 mysql 工作台,但无法通过标准 (TCP/IP) 连接

python - 可移植/独立 Web 应用程序的潜在数据库系统?

sql - 向表中添加大量索引是否有不利之处?

php - 为什么我在 phpmyadmin 中看不到表的结构?

mysql - 我安装了 MySQL,但无法通过终端访问它

php - 使用 PHP 将数据库数据编码为 JSON

mysql - 给出用户的总订单价格,不重复

php - 不知道我做错了什么 php 登录脚本

php - 如何在 phpmyadmin 和 MySQL 中创建插入和更新列?