MySQL 进阶

以多列排序

  • 排序的先后顺序和order by的顺序一样,降序(大的在前面)desc关键字,可以只指定一个列。

  • 使用ORDER BY和LIMIT的组合,能够找出一个列中最高或最低的值。

操作符

and的优先级更高,所以在where语句中有and和or,最好加括号。

group by

  • 除聚集计算语句外,SELECT语句中的每个列都必须在GROUP BY子句中给出。
  • 如果分组列中具有NULL值,则NULL将作为一个分组返回。如果列中有多行NULL值,它们将分为一组。

having

  • 除了能用GROUP BY分组数据外,MySQL还允许过滤分组,规定包括 哪些分组,排除哪些分组。
  • WHERE在数据分组前进行过滤,HAVING在数据分组后进行过滤。

相关子查询

  • 定义:涉及外部查询的子查询。
  • 首先,建立和测试最内层的查询。然后,用硬编码数据建立和测试外层查询,并且仅在确认它正常后才嵌入子查询。这时,再次测试它。对于要增加的每个查询,重复这些步骤。这样做仅给构造查询增加了一点点时间,但节省了以后(找出查询为什么不正常)的大量时间,并且极大地提高了查询一开始就正常工作的可能性。

关系表

  • 关系表的设计就是要保证把信息分解成多个表,一类数据 一个表。各表通过某些常用的值(即关系设计中的关系(relational))互 相关联。
  • 分解数据为多个表能更有效地存储,更方便地处理,并 且具有更大的可伸缩性。

主键

  • vendors表包含所有供应商信息,每个供应商占一行,每个供 应商具有唯一的标识。此标识称为主键(primary key)

外键

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

可伸缩性

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

笛卡尔积

  • 由没有联结条件的表关系返回 的结果为笛卡儿积。检索出的行的数目将是第一个表中的行数乘 以第二个表中的行数。
  • 相应的笛卡儿积不是我们所想要 的。这里返回的数据用每个供应商匹配了每个产品,它包括了 供应商不正确的产品。实际上有的供应商根本就没有产品。

索引

MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度。
创建索引时,你需要确保该索引是应用在SQL 查询语句的条件(一般作为 WHERE 子句的条件)。

PRIMARY KEY 约束

PRIMARY KEY 约束唯一标识数据库表中的每条记录。
主键必须包含唯一的值。
主键列不能包含 NULL 值。
每个表都应该有一个主键,并且每个表只能有一个主键。

KEY

KEY wh_logrecord_user_name (user_name)
本表的user_name字段与wh_logrecord_user_name表user_name字段建立外键
括号外是建立外键的对应表,括号内是对应字段
类似还有 KEY user(userid)
当然,key未必都是外键