一尘不染

MySQL中的外键?

sql

最近几周我一直在慢慢学习SQL。我已经掌握了所有关系代数以及关系数据库如何工作的基础知识。我现在想做的是学习如何实现它。

我遇到的一个绊脚石是MySQL中的外键。除了MySQL拥有的InnoDB存储模式中存在的其他内容外,我似乎找不到其他的东西。

什么是在MySQL中实现的外键的简单示例?

这是我编写的架构的一部分,如果您宁愿指出我的缺点而不是向我展示一个有效的示例,那么它似乎并不起作用。

CREATE TABLE `posts` (
`pID` bigint(20) NOT NULL auto_increment,
`content` text NOT NULL,
`time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`uID` bigint(20) NOT NULL,
`wikiptr` bigint(20) default NULL,
`cID` bigint(20) NOT NULL,
PRIMARY KEY  (`pID`),
Foreign Key(`cID`) references categories,
Foreign Key(`uID`) references users
) ENGINE=InnoDB;

阅读 149

收藏
2021-03-17

共1个答案

一尘不染

假设您的类别和用户表已经存在,并且分别包含cID和uID作为主键,则这应该起作用:

CREATE TABLE `posts` (
`pID` bigint(20) NOT NULL auto_increment,
`content` text NOT NULL,
`time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`uID` bigint(20) NOT NULL,
`wikiptr` bigint(20) default NULL,
`cID` bigint(20) NOT NULL,
PRIMARY KEY  (`pID`),
Foreign Key(`cID`) references categories(`cID`),
Foreign Key(`uID`) references users(`uID`)
) ENGINE=InnoDB;

references子句中的列名称是必需的。

2021-03-17