MySQL必知必会——联结表

外键(foreign key):外键为某个表中的一列,它包含另一个表的主键值,定义了两个表之间的关系。

可伸缩性(scale):能够适应不断增加的工作量而不失败。设计良好的数据库或应用程序称之为可伸缩性好。

联结是一种机制,用来在一条select语句中关联表,因此称之为联结。联结不是物理实体。换句话说,它在实际的数据库表中不存在。联结由MySQL根据需要建立,它存在于查询的执行当中。

完全限定名:在引用的列可能出现二义性时,必须使用完全限定列名(用一个点分隔的表名和列名)。如果引用一个没有表名限制的具有二义性的列名,MySQL将返回错误。

笛卡儿积(cartesian product):由没有联结条件的表关系返回的结果称为笛卡尔积。检索出的行的数目将是第一个表中的行数乘以第二个表中的行数。

不要忘了where子句:应该保证所有的联结都由where子句,否则MySQL将返回比想要的数据多得多的数据。同理,应该保证where子句的正确型,不正确的过滤条件将导致MySQL返回不正确的数据。

CUE:有时又将笛卡尔积的联结类型称为叉联结(cross join)。

等值联结(equijoin):它基于两个表之间的相等测试,这种联结也成为内部联结。

ANSI SQL规范首先INNER JOIN语法。此外,尽管使用where子句定义的联结的确比较简单,但是使用明确的联结语法能够确保不会忘记联结条件。

SQL对一条select语句中可以联结的表的数目没有限制。创建联结的基本规则也相同。首先列出所有表,然后定义表之间的关系。

性能考虑:MySQL在运行时关联指定的每个表以处理联结。这种除了可能是非常耗费资源的,因此应该仔细,不要联结不必要的表。联结的表越多,性能下降越厉害。