MySQL必知必会摘录

主题概要
数据库MySQL注意总结
编辑时间
新建20160526
序号参考资料
1MySQL必知必会

Select结果顺序

用select检索出的数据,不能(也不应该)依赖于检索结果的顺序。如果不明确规定排序顺序有意义,则不应该假定检索出的数据的顺序有意义。

Where子句中and优先级最高

用where语句进行过滤时,AND在计算次序中优先级最高,如:
这里写图片描述
结果并不是想像中的自左向右的结合,所有prod_price都大于等于10,而是vend_id=1003 AND prod_price>=10的结果再 OR vend_id=1002。解决方法是按需要加圆括号。

通配符使用技巧

百分号(%)通配符—表示任何字符出现任意次数;
下划线(_)通配符—只匹配单个字符而不是多个字符;
需注意:
不要过度使用通配符,如果其他操作符能达到相同的目的,应该使用其他操作符。
在确实需要使用通配符时,除非绝对有必要,否则不要把它们用在搜索模式的开始处,否则速度会很慢。
仔细注意通配符的位置,如果放错地方,可能不会返回想要的数据。

LIKE与REGXP的区别

这里写图片描述
因为LIKE匹配整个列,如果被匹配的文本仅在列值中出现,LKIE将不会找到它,相应的行也不被返回(除非使用通配符)。而REGEXP在列值内进行匹配,如果被匹配的文本在列值中出现,REGEXP将会找到它,相应的行将被返回,这是个非常重要的区别。使用^和$定位符,REGEXP也能匹配整个列值。

HAVING分组

HAVING非常类似于WHERE,事实上所有WHERE子句都可用HAVING替代,唯一差别是,WHERE过滤行,而HAVING过滤分组。

各类联结

等值联结与内部联结

通过使用WHERE子句与INNER JOIN语法,如:
这里写图片描述

这里写图片描述
ANSI SQL规范首选INNER JOIN语法,尽管使用WHERE子句定义联结的确比较简单,但是使用明确的联结语法能够确保不会忘记联结条件,有时候这样做也能影响性能。

自联结

假如你发现某物品(其ID为DTNTR)存在问题,因此想知道生产该物品的供应商生产的其他物品是否也存在这些问题。此查询要求首先找到生产ID为DTNTR的物品的供应商,然后找出这个供应商生产的其他物品,
可通过:
这里写图片描述
等价于:
这里写图片描述
注意:使用自联结而不用子查询,自联结通常作为外部语句用来替代从相同表中检索数据时使用的子查询语句。虽然最终的结果是相同的,但有时候处理联结远比处理子查询快得多。

外部连接(左连接与右连接)

许多联结将一个表中的行与另一个表中的行相关联,但有时候会需要包含没有关联行的那些行,例如:
对每个客户下了多少订单进行计数,包括那些至今尚未下订单的客户。
左连接示例:
这里写图片描述

联结总结

注意所使用的联结类型,一般我们使用内部联结,但使用外部联结也是有效的。
保证使用正确的联结条件,否则将返回不正确的数据。
应该总是提供联结条件,否则会得出笛卡尔积。
在一个联结中可以包含多个表,甚至对每个联结都可以采用不同的联结类型,但应该在一起测试前,分别测试每个联结,方便排除故障。

UNION操作

多数SQL查询都只包含从一个或多个表中返回数据的单条SELECT语句。MySQL允许执行多个查询,并将结果作为单个查询结果返回,有两种基本情况:
在单个查询中从不同的表返回类似结构的数据;
对单个表执行多个查询,按单个查询返回数据。
这里写图片描述
注意,所有UNION组合,只能使用一条ORDER BY子句,且必须出现在最后一条SELECT语句之后,不存在用一种方式排序一部分,而又用另一种方式排序另一部分的情况。

提高INSERT操作整体性能

INSERT操作可能很耗时,特别是有很多索引需要更新时,而且它可能降低等待处理的SELECT语句的性能。如果数据检索是最重要的(通常是这样),则可以通过在INSERT和INTO之间添加关键字LOW_PRIORITY,指示MySQL降低INSERT语句的优先级,如下所示:
INSERT LOW_PRIORITY INTO
这也适用于UPDATE和DELETE语句。

MYSQL引擎类型

常用的几个引擎:
InnoDB:是一个可靠的事务处理引擎,它不支持全文本搜索;
MEMORY:功能等同于MyISAM,但由于数据存储在内存(不是磁盘)中,速度很快(特别适合于临时表);
MyISAM:是一个性能极高的引擎,它支持全文本搜索,但不支持事务处理。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值