多表查询
多表查询: 指从多张表中查询数据。
笛卡尔积: 笛卡尔乘积是指在数学中,两个集合(A集合 和 B集合)的所有组合情况。
连接查询:
内连接:相当于查询A、B交集部分数据
外连接 左外连接:查询左表所有数据(包括两张表交集部分数据)
右外连接:查询右表所有数据(包括两张表交集部分数据)
子查询
内连接
隐式内连接:
select 字段列表 from 表1 , 表2 where 条件 ... ;
显式内连接:
select 字段列表 from 表1 [ inner ] join 表2 on 连接条件 ... ;
外连接
左外连接:
select 字段列表 from 表1 left [ outer ] join 表2 on 连接条件 ... ;
右外连接:
select 字段列表 from 表1 right [ outer ] join 表2 on 连接条件 ... ;
子查询
介绍:SQL语句中嵌套select语句,称为嵌套查询,又称子查询。
形式:
select * from t1 where column1 = ( select column1 from t2 … );
子查询外部的语句可以是insert / update / delete / select 的任何一个,最常见的是 select。
标量子查询:子查询返回的结果为单个值
子查询返回的结果是单个值(数字、字符串、日期等),最简单的形式
常用的操作符:= <> > >= < <=
列子查询:子查询返回的结果为一列
子查询返回的结果是一列(可以是多行)
常用的操作符:in 、not in等
行子查询:子查询返回的结果为一行
子查询返回的结果是一行(可以是多列)
常用的操作符:= 、<> 、in 、not in
表子查询:子查询返回的结果为多行多列
子查询返回的结果是多行多列,常作为临时表 常用的操作符:in
事务
介绍
事务 是一组操作的集合,它是一个不可分割的工作单位。事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作 要么同时成功,要么同时失败。
默认MySQL的事务是自动提交的,也就是说,当执行一条DML语句,MySQL会立即隐式的提交事务。
开启事务:
start transaction; / begin ;
提交事务:
commit;
回滚事务:
rollback;
四大特性:
原子性:事务是不可分割的最小单元,要么全部成功,要么全部失败
一致性:事务完成时,必须使所有的数据都保持一致状态
隔离性:数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行
持久性:事务一旦提交或回滚,它对数据库中的数据的改变就是永久的
索引
介绍
索引(index)是帮助数据库 高效获取数据 的 数据结构
优点:
提高数据查询的效率,降低数据库的IO成本。 通过索引列对数据进行排序,降低数据排序的成本,降低CPU消耗。
缺点:
索引会占用存储空间。 索引大大提高了查询效率,同时却也降低了insert、update、delete的效率。
结构
MySQL数据库支持的索引结构有很多,如:Hash索引、B+Tree索引、Full-Text索引等。我们平常所说的索引,如果没有特别指明,都是指默认的 B+Tree 结构组织的索引
创建索引:
create [ unique ] index 索引名 on 表名 (字段名,... ) ;
查看索引:
show index from 表名;
删除索引:
drop index 索引名 on 表名;
注意事项:
主键字段,在建表时,会自动创建主键索引。 添加唯一约束时,数据库实际上会添加唯一索引。