多表查询分类:
多表查询分类三种
1)内连接
隐式内连接---看不到join关键字,使用where条件
内连接之隐式内连接 :select 字段列表 from 表名名1,表名名2 where 连接条件 ;
显示内连接---inner join 关键字
select 字段列表 from 表名名1 inner join 表名名2 on 连接条件;
2)外连接
左外连接:将左边表数据以及满足两种表条件的数据全部展示;
语法:select 字段列表 from 表名1 left outer join 表名2 on 连接条件
outer可以省略
右外连接
3)子查询:select 语句嵌套select语句,
常用where条件使用比较运算符
或者使用in集合语句
或者使用一条select语句的结果作为一个"虚表"和其他表查询
数据库事务:
事务:就是当前整个业务操作同时要执行多个sql或者多张表的sql的时候,使用事务
将业务整体管理起来,要么这个多个sql同时执行成功,要么同时执行失败
-- 原子性:使用事务管理的业务操作(执行多个sql),要么同时执行成功,要么同时失败
-- 一致性:在事务管理的业务操作过程中,执行之前和执行之后它的数量总量不变
-- 隔离性:业务和业务之间是独立,业务又需要被事务管理,事务和事务之间是独立的,相互之间不影响,分离开来!
-- 持久性:针对增删改操作,只要提交事务,即使关机了,数据永久保存!
事务的隔离级别四种:分别从小到大,安全性(从低到高),执行效率(从高到低)read uncommitted; 读未提交, 会导致最严重的问题 "脏读"(一个事务读到另一个没有提交事务)
read committed ; 读已提交,可以有效防止脏读,但是会现在一个问题"不可重复读"(在提交事务之前和事务,数据不一致!)
repeatable read ; 可重复读(mysql默认隔离级别) , 可以有效防止脏读以及不可重复读,会出现"幻读"
serializable ; 串行话 级别最高,安全性最高,效率低!
-- 部门表
CREATE TABLE dept (
id INT PRIMARY KEY PRIMARY KEY,
-- 部门id
dname VARCHAR (50),
-- 部门名称
loc VARCHAR (50) -- 部门所在地
) ;
-- 添加4个部门
INSERT INTO dept (id, dname, loc)
VALUES
(10, '教研部', '北京'),
(20, '学工部', '上海'),
(30, '销售部', '广州'),
(40, '财务部', '深圳') ;