【问题标题】:MySQL Foreign Key Reference SyntaxMySQL 外键引用语法
【发布时间】:2023-03-22 10:02:01
【问题描述】:

我在 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 的表。当我执行上述查询时,我得到一个类似这样的错误:

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

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

我们将不胜感激。上面的查询应该是用 PHP My Admin 编写的。

P.S.(如果发现有任何错误欢迎编辑)

【问题讨论】:

    标签: mysql database phpmyadmin


    【解决方案1】:

    定义在内部创建表语句:

    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 是一个 dbfiddle。

    【讨论】:

    • 我已经尝试了上面的查询,它给出了一个错误。
    • 等我再试一次。
    • 谢谢伙计!你真正的救星:D
    猜你喜欢
    • 2013-05-21
    • 1970-01-01
    • 2013-01-25
    • 1970-01-01
    • 2015-01-26
    • 1970-01-01
    • 1970-01-01
    • 2010-11-01
    • 1970-01-01
    相关资源
    最近更新 更多