内连接就是多表查询中where子句对笛卡尔积的筛选,我们前面学习的都是内连接。
语法:select 字段 from 表1 inner join 表2 on 连接条件 and 其他条件;
例如:显示SMITH的名字和部门名称
左外连接:联合查询中,左侧的表完全显示,就是左外连接。
语法:select 字段 from 表名1 left join 表名2 on 连接条件;
例如:首先创建两张表,学生表和成绩表
查询所有学生的成绩,即使这个学生没有成绩,也要将学生的个人信息显示出来
右外连接:与左外连接相反,右侧的表完全显示
语法:select 字段 from 表名1 right join 表名2 on 连接条件;
例如:将所有的成绩都显示出来,即使这个成绩没有学生与之对应,也需要显示出来
当数据很多的时候,我们查找的时候,会消耗很多的时间,尤其是在实际项目中,同时又很多人并发查询,还有可能导致死机,所以,我们需要创建索引。
常见的索引分为主键索引,唯一索引,普通索引和全文索引。
主键索引:即将某一列设置为主键;
唯一索引:即将某一列设置为唯一键;
普通索引:
第一种,在创建表时,在表的最后一句加上index:
create table stu(
id int,
name varchar(20),
index(name)
);
第二种:创建完表以后指定某列为普通索引:
alter table 表名 add index(字段);
全文索引:
当文章字段或有大量文字的字段进行检索时,会用到全文索引。
例如,在上表中,查找带有database关键字的记录
使用普通方法查询:
使用索引查询:
1. show keys from 表名;
2. show index from 表名;
3. desc 表名;
1. drop index 索引名 on 表名;
2. alter table 表名 drop index 索引名;
事务就是一组dml语句组成,这一组语句要么全部成功,要么全部失败,是一个整体。
开始一个事务:start transaction;
做一个保存点:savepoint aaa;
进行各种操作
insert into account values(1,'test',100.01);
select * from account;
如果有需要,可以回到保存点:rollback to aaa;
提交事务:commit;
注意:
1. 如果没有设置保存点,也可以回滚,这是回滚到事务的开始,直接使用rollback
2. 如果一个事务被提交了,则不可以回退;
3. InnoDB支持事务,MyISAM不支持事务;
事务的隔离级别有:读而未交(read uncommitted), 读已提交(read committed), 可重复读(repeatable read), 可串行化(serializable)
设置隔离级别:set session transaction isolation level read uncommitted;
查看当前事务的隔离级别:select @@tx_isolation;
视图是一个虚表,其内容由查询定义,视图的数据变化会影响到基表,基表的数据变化也会影响到视图。
创建视图:
create view 视图名
as
select 语句
删除视图:drop view 视图名;
视图和真实数据表的区别: