MySQL将数据库中的表关联起来

Lea*_*cim 1 php mysql

在我用来学习PHP和SQL的视频tutoria/book中,作者解释了使数据库表彼此相关的外键的概念.正如您将在下图中看到的那样,我们目前正在制作一个名为"评论"的表格.在这个SQL中,有一行photograph_id INT( 11 ) NOT NULL,称为"外键",作者称其将"注释"表与已存在的"照片"表相关联.

我的问题是,由于该表被称为"照片"(复数带有s),但sql外键是"photograph_id",SQL如何连接这两个?究竟什么是"photograph_id"允许MySQL将它与"照片"表联系起来.

+-----------------------------+
| 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
    -> );
Run Code Online (Sandbox Code Playgroud)

Kon*_*rak 5

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,
FOREIGN KEY (`photograph_id`) REFERENCES `photographs` (`id`) ON DELETE CASCADE
);
Run Code Online (Sandbox Code Playgroud)

这将告诉MySQL你的表comments有一个外键.您没有为密钥指定名称,因此mysql将自己选择名称.它们的键位于photograph_id该表的列上.键指的是表photographs,它的列id.

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