当前位置:  开发笔记 > 编程语言 > 正文

MySQL中的外键?

如何解决《MySQL中的外键?》经验,为你挑选了2个好方法。

过去几周我一直在慢慢学习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;

Robert Gambl.. 23

假设您的类别和用户表已经存在并且分别包含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子句中需要列名.



1> Robert Gambl..:

假设您的类别和用户表已经存在并且分别包含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子句中需要列名.



2> Bill Karwin..:

编辑: Robert和Vinko声明您需要在外键约束中声明引用列的名称.这在InnoDB中是必需的,但在标准SQL中,如果父表中的名称相同,则允许省略引用的列名.

我在MySQL中遇到的一个特性是外键声明在几种情况下会无声地失败:

您的MySQL安装不包括innodb引擎

你的MySQL配置文件没有启用innodb引擎

您没有使用ENGINE = InnoDB表修饰符声明您的表

外键列与引用表中的主键列的数据类型不完全相同

不幸的是,MySQL没有给出它无法创建外键约束的消息.它只是忽略了请求,并创建了没有外键的表(如果你SHOW CREATE TABLE的帖子,你可能看不到外键声明).我一直认为这是MySQL的一个不好的功能!

提示:整数数据类型的整数参数(例如BIGINT(20))不是必需的.它与存储大小或列的范围无关.无论您给出的参数如何,BIGINT总是相同的大小.如果使用ZEROFILL列修饰符,则数字指的是MySQL将填充列的位数.

推荐阅读
pan2502851807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有