我在 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/