多表查询
查询语法:
Select
列名列表
From
表名列表
Where…
笛卡尔积:
有两个集合A,B,取这两个集合的所有组成情况
多表查询分类:
- 内连接查询
- 外连接查询
- 子查询
*内连接查询
隐式内连接:使用where条件来消除无用数据
-- 查询所有员工信息和对应部门信息
SELECT
*
FROM
Emp t1,dept t2
WHERE
T1.`dept_id`=t2.`id`;
*子查询
概念:查询中嵌套查询,城嵌套查询为子查询
-- 查询工资最高的员工信息
SELECT
*
FROM
emp
WHERE
emp.`salary`=(
SELECT
MAX(salary)
FROM
emp
);
*子查询不同情况
1、子查询的结果是单行单列:
子查询可以作为条件,使用运算符进行运算二元运算符
2、子查询的结果是多行单列
可以使用运算符 IN来运算
3、子查询的结果是多行多列
多行多列子查询可以作为一张虚拟表来进行表查询
*显式内连接
语法:select 字段列表 from 表名1 inner join 表名2 on 条件
SELECT
*
FROM
emp t1
[INNER] JOIN
dept t2
ON
t1.`dept_id`=t2.`id`;
练习:
##事务
- 事务的基本介绍
- 事务的四大特征
- 事务的隔离级别
*事务的基本介绍
1、概念:
如果一个包含多个步骤的业务操作,被事务管理,要么同时成功,要么同时失败
- 操作:
开启事务 start transaction
回滚 rollback
提交 commit
Mysql数据库中事务自动提交
手动提交需要先开启事务
*事务的四大特征:
1、原子性:是不可分割的最小操作单位,要么同时成功,要么同时失败
2、持久性:当事务提交或回滚后,数据库会持久化的保存数据
3、隔离性:事务之间相互独立
4、一致性:事务操作前后,数据总量不变
*事务的隔离级别:
概念:多个事务之间是隔离的,相互独立的,但是如果多个事务操作同一批数据,则会引发一些问题,设置不同的隔离级别就可以解决这些问题
存在问题:
- 脏读:一个事务读取到另一个事务中没有提交的数据
- 不可重复读(需读):在同一个事务中两次读取到的数据不一样。
- 幻读:一个事务操作数据表中所有记录,另一个事务添加了一条数据,则第一个事务查询不到自己的修改