MySQL多表查询
表连接查询:
查询员工的信息, 包括所在的部门名称
SELECT * FROM tab_emp, tab_dept;
左表的每条数据和右表的每条数据组合,这种效果称为笛卡尔乘积。
过滤掉没用数据的条件称为表连接条件。
左外连接: 左表不满足要求的数据也显示。
可以省略OUTER
右外连接: 右表不满足要求的数据也显示。
可以省略OUTER
子查询:
子查询: 一个查询语句的结果作为另一个查询语句的一部分
子查询需要放在()中
先执行子查询,将子查询的结果作为父查询的一部分。
子查询的结果是单行单列:
子查询结果是多行单列:
子查询的结果是多行多列:
索引
索引的使用原则
在数据量大的表上建立索引才有意义(最起码十万级别数据才会考虑索引)
在经常查询的字段上使用索引,用在where子句后面或者是连接条件上的字段建立索引
表中数据修改频率高时,不建议建立索引(每插入、或者修改一条记录MySQL都要维护索引的顺序,这个过程不需要我们参与,但是非常消耗性能)
索引的不足
虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行INSERT、UPDATE和DELETE。因为更新表时,MySQL不仅要保存数据,还要保存更新索引文件。建立索引会占用磁盘空间的索引文件。
索引失效
如果条件中有OR,即使其中有条件带索引也不会使用。(例外:OR两边条件都是同一个字段 )
模糊LIKE查询以 '%xxx’开头的不会使用索引,以’xxx%'结尾会使用索引。
WHERE语句中使用不等于 <>和 != 不会使用索引
如果MySQL计算使用全表扫描要比使用索引快,则不使用索引。
事务
由多条SQL语句组成一个功能,这多条SQL语句就组成事务。
1、手动提交事务:
2、自动提交事务:
MySQL的每一条DML(增删改)语句都是一个单独的事务,每条语句DML执行完毕自动提交事务,MySQL默认开始自动提交事务。
3、事务原理
4、设置回滚点:
5、事务的隔离级别