MySQL 学习笔记 基础(多表查询 下,事务)

多表查询

 

多表查询-子查询

  • 概念:SQL语句中嵌套 SELECT 语句,称为嵌套语句,又称子查询。
SELECT * FROM t1 WHERE column = ( SELECT column1 FROM t2 );

子查询外部的语句可以是 INSERT/ UPDATE/ DELETE/ SELECT 的任何一个。

  • 根据子查询结果不同,分为:

    · 标量子查询(子查询结果为单个值)

    · 列子查询(子查询结果为一列)

    · 行子查询(子查询结果为一行)

    · 表子查询(查询结果为多行多列)

  • 根据子查询位置,分为:WHERE 之后,FROM 之后,SELECT 之后。

 

多表查询-子查询-标量子查询

子查询返回的结果是单个值(数字、字符串、日期等),最简单的形式,这种子查询称为标量子查询。

常用的操作符:=  <>  >  >=  <  <=

例子1:查询“销售部”的所有员工信息

select * from emp where dept_id = (select id from dept where name = '销售部');

例子2:查询在员工“方东白”入职之后的员工信息

select * from emp where entrydate > (select entrydate from emp where name = '方东白' );

 

多表查询-子查询-列子查询

子查询返回的结果是一列(可以是多行),这种子查询称为列子查询。

常用的操作符:IN、NOT IN、ANY、SOME、ALL

 例子1:查询“销售部”和“市场部”的所有员工信息

select * from emp where dept_id in (select id from dept where name = '销售部' or name = '市场部');

例子2:查询比“财务部”所有人工资都高的员工信息

select * from emp where salary > all ( select salary from emp where dept_id = (select id from dept where name = '财务部') );

例子3:查询比“研发部”其中任意一人工资高的员工信息

select * from emp where salary > any ( select salary from emp where dept_id = (select id from dept where name = '研发部') );

 

多表查询-子查询-行子查询

子查询返回的结果是一行(可以是多列),这种子查询称为行子查询。

常用的操作符:=、<>、IN、NOT IN

例子1:查询与“张无忌”的薪资以及直属领导完全相同的员工信息

select * from emp where (salary, managerid) = (select salary, managerid from emp where name = '张无忌');

 

多表查询-子查询-表子查询

子查询返回的结果是多行多列,这种子查询称为表子查询。

常用的操作符:IN

例子1:查询与“鹿杖客”,“宋远桥”的职位和薪资相同的员工信息

select * from emp where (job, salary) in ( select jot, salary from emp where name = '鹿杖客' or name = '宋远桥' );

例子2:查询入职日期是“2006-01-01”之后的员工信息,及其部门信息

select e.* d,* from (select * from emp where entrydate > '2006-01-01') e left join dept d on e.dept_id = d.id ;

 

事务

 

事务-简介

事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。

默认MySQL的事务是自动提交的,也就是说,当执行一条DML语句,MySQL会立即隐式的提交事务。

 

事务-事务四大特性

  • 原子性(Atomicity):事务是不可分割的最小操作单元,要么全部成功,要么全部失败。
  • 一致性(Consistency):事务完成时,必须使所有数据都保持一致状态。
  • 隔离性(Isolation):数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行。
  • 持久性(Durability):事务一旦提交或回滚,它对数据库中的数据的改变就是永久的。

 

事务-并发事务问题

 

事务-并发事务演示及隔离级别

  •  查看事务隔离级别
SELECT @@TRANSACTION_ISOLATION;
  • 设置事务隔离级别
SET [SESSION GLOBAL] TRANSACTION ISOLATION LEVEL {READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE}

 

posted @ 2024-07-24 16:27  handsome_zyc  阅读(3)  评论(0编辑  收藏  举报