首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数据库中的MySQL关联表

问数据库中的MySQL关联表
EN

Stack Overflow用户
提问于 2011-03-15 17:36:56
回答 5查看 2.1K关注 0票数 1

在我用来学习PHP和SQL的视频教程/书中,作者解释了外键的概念,以使数据库表相互关联。正如您将在下图中看到的,我们目前正在创建一个名为“comments”的表。在这个SQL中,有一行名为“photograph_id INT( 11 ) NOT NULL,”的外键,作者说它将“注释”表与已经存在的“照片”表联系起来。

我的问题是,既然表被称为“照片”(带有s的复数),而sql外键是"photograph_id",那么SQL如何将这两者连接起来呢?究竟是什么让MySQL将"photograph_id“与"photographs”表相关联。

代码语言:javascript
复制
+-----------------------------+
| Tables_in_C263430_quoralist |
+-----------------------------+
| photographs                 |
| users                       |
+-----------------------------+
2 rows in set (0.21 sec)

mysql> CREATE TABLE comments (
    -> id INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY,
    -> photograph_id INT( 11 ) NOT NULL,
    -> created DATETIME NOT NULL,
    -> author VARCHAR( 255 ) NOT NULL,
    -> body TEXT NOT NULL
    -> );
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-03-15 17:41:06

MySQL不会自动“连接”这两个表,您必须自己做:

代码语言:javascript
复制
CREATE TABLE comments (
id INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY,
photograph_id INT( 11 ) NOT NULL,
created DATETIME NOT NULL,
author VARCHAR( 255 ) NOT NULL,
body TEXT NOT NULL,
FOREIGN KEY (`photograph_id`) REFERENCES `photographs` (`id`) ON DELETE CASCADE
);

这将告诉MySQL您的表comments有一个外键。您没有为键指定名称,因此mysql将自己选择一个名称。键在该表的列photograph_id上。该键引用其列id的表photographs。

也许作者的意思是您使用列来“模拟”外键,这意味着您使用该键连接到照片的主键,而没有真正添加外键约束。因此,作为数据库管理员,您知道该字段用于关系,但数据库本身不知道(因此不会检查该字段的完整性:您可以向不存在的照片添加注释)。

票数 5
EN

Stack Overflow用户

发布于 2011-03-15 17:40:53

照片表格可能如下所示:

代码语言:javascript
复制
photograph_id        image_path
========================================
34343                /images/img_343.jpg
34344                /images/img_344.jpg
34345                /images/img_345.jpg
34346                /images/img_346.jpg
34347                /images/img_347.jpg

它是存储在数据库中的一组照片文件名。请注意,有些人还会将照片本身以BLOB格式存储在数据库中。

当创建注释记录时,SQL指定将上述照片记录中的哪一个用于照片。

票数 1
EN

Stack Overflow用户

发布于 2011-03-15 17:44:33

外键字段的实际名称并不重要;它主要用于文档。通常的表命名约定是,它们是每行所代表的所有内容的复数,而列名是单数。

通过在依赖表中指定外键约束(在您的示例中为注释),将这些表绑定在一起。请注意,每个表使用的存储引擎会影响系统是否强制执行外键约束。默认的MyISAM存储引擎不强制执行约束;InnoDB存储引擎强制执行。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5309853

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档