多表查询
MySQL不支持full join ,可以使用union连接两条查询语句,实现全连接(查询并集)
例如:select * from stu1 union select * from stu2;
概念
笛卡尔积 取A,B集合所有组合情况
多表查询 从多张表中查询数据:连接查询&子查询
-
连接查询
- 内连接 查询集合A,B的交集数据
- 外连接
- 左外连接 查询A表所有数据和交集部分数据
- 右外连接 查询B表所有数据和交集部分数据
-
子查询
内连接
基本语法
-- 隐式内连接
select 字段列表 from 表名1,表名2... where 条件;
-- 显式内连接
select 字段列表 from 表1 [inner] join 表2 on 条件;>
为应对不同表中字段名相同的情况,在字段名前加上表名作为前缀进行引用,例如emp.id,stu.id
当表名过长时,通常给表名取别名以简化书写
例如
select t1.id,t2.id from emp t1,stu t2 where t1.id = t2.id
外连接
基本语法
--左外连接
select 字段列表 from 表1 left [outer] join 表2 on 条件;
--右外连接
select 字段列表 from 表1 right [outer] join 表2 on 条件;
子查询
概念 查询中嵌套查询,称嵌套查询为子查询(查询语句的条件是一条可以得出结果的查询语句)
子查询根据查询结果不同 ,作用不同
-
单行单列 作为条件值,使用= != > < 等进行条件判断
select 字段列表 from 表 where 字段名 = (子查询);
-
多行单列 作为条件值,使用in等关键字进行条件判断
select 字段列表 from 表 where 字段名 in (子查询);
-
多行多列 作为虚拟表
select 字段列表 from (子查询) where 条件;
事务
概念
- 数据库的事务是一种机制,一个操作序列,包含了一组数据库操作命令
- 事务把所有命令作为一个整体一起向系统提交或撤销操作请求,即这一组数据库命令要么同时成功,要么同时失败
- 事务是一个不可分割的工作逻辑单元
操作
一个事务的操作包括了 开启事务--->(出现异常)回滚事务--->提交事务
基本语法
-- 开启事务
start transaction;
或者
begin;
-- 回滚事务
rollback;
-- 提交事务
commit;
roolback和commit不能同时运行,二者同时运行时,并不能理想的进入回滚的内循环,而会回滚一次后直接执行commit
commit会让数据被持久化的更改,即在其他窗口页面查询时数据也会呈现更改后的结果
roolback会阻止发生异常的事务继续执行,回滚到事务初始的状态
事务的提交方式
--查看事务的默认提交方式
select @@autocommit;
-- 1 自动提交 0 手动提交
修改事务提交方式
set @@autocommit = 0;
事务的四大特征(A-C-I-D)
-
原子性(Atomicity):事务是不可分割的最小操作单位,要么同时成功,要么同时失败
-
一致性(Consistency):事务完成时,必须使所有的数据都保持一致状态
-
隔离性(Isolation):多个事物之间,操作的可见性
-
持久性(Durability):事务一旦提交或回滚,它对数据库中的数据的改变就是永久的
网友评论