子查询
将一条查询sql的结果作为另一条sql的条件
使用方法总结:
# 增:insert into 表 select子查询 # 删:delete from 表 条件是select子查询(表不能与delete表相同) # 查:select 字段 from 表 条件是select子查询 # 改:update 表 set 字段=值 条件是select子查询(表不能与update表相同)
联合分组:
按多个字段综合结果进行分组
使用方法总结:
# 按 area与port组合后的结果进行分组,只有组合后的结果还一致,才认为是一组 select group_concat(name),area,port from emp group by area,port;
区间修饰条件(all与any):
使用方法总结:
# 语法规则 # where id in (1, 2, 3) => id是1或2或3 # where id not in (1, 2, 3) => id不是1,2,3 # where salary < all(3, 6, 9) => salary必须小于所有情况(小于最小) # where salary > all(3, 6, 9) => salary必须大于所有情况(大于最大) # where salary < any(3, 6, 9) => salary只要小于一种情况(小于最大) # where salary > any(3, 6, 9) => salary只要大于一种情况(大于最小) in < > () # 案例 select * from emp where salary < all(select salary from emp where id>11);
视图:
1)视图是存在内存中的临时表
2)视图的创建依赖select语句,所有就是select语句操作的结果形参的表
3)视图支持对数据的增删查改 ?
4)视图不允许对视图表的字段做修改
5)视图不仅支持创建,也支持更新与删除
使用方法总结:
# 创建视图 mysql>: create view 视图名[(别名们)] as select 语句; eg>: create view v1 as select dep, max(salary) from emp group by dep; # 创建或替换视图 mysql>: create or replace 视图名[(别名们)] as select 语句; mysql>: alter 视图名[(别名们)] as select 语句; eg>: create or replace view v1(dep_name, max_salary) as select dep, max(salary) from emp group by dep; eg>: alter view v1(name, salary) as select dep, max(salary) from emp group by dep; # 删除视图 mysql>: drop view 视图名 eg>: drop view v1; # 视图可以作为正常表完成连表查询 select name, dep_name, salary from emp join v1 on emp.dep=v1.dep_name and emp.salary=v1.max_salary;
注:视图的增删改
# 前提:视图的增删改操作可以直接映射给真实表(本质就是对真实表进行操作) # 视图可以完成增删改,增删改本质是直接对创建视图的真实表进行操作 create or replace view v2 as select id,name,age,salary from emp; update v2 set salary=salary+1 where id=1; delete from v2 where id=1; create or replace view v3 as select * from emp; insert into v3 values(1, 'yangsir', '男', 66, 1.11, '上海', '那噶的', '教职部'); # 总结:操作视图,会影响真实表,反之也会影响 update emp set salary=salary+1 where id=1;
事务
# 事务:通常一些业务需要多条sql参与,参与的sql会形参一个执行整体,该整体我们就称之为 事务 # 简而言之:事务 - 就是保护多条执行的sql语句 # 比如:转账就是一个事务:从一个用户将资金转出,再将资金转入到另一个用户 事务的四大特性 1.原子性:事务是一组不可分割的单位,要么同时成功,要么同时不成功 2.一致性:事物前后的数据完整性应该保持一致(数据库的完整性:如果数据库在某一时间点下,所有的数据都符合所有的约束,则称数据库为完整性的状态) 3.隔离性:事物的隔离性是指多个用户并发访问数据时,一个用户的事物不能被其它用户的事务所干扰,多个并发事务之间数据要相互隔离 4.持久性:持久性是指一个事物一旦被提交,它对数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响
使用方法总结:
# mysql中事务的执行 create table bank( id int, name varchar(16), money decimal(65, 2) ); insert into bank values(1, 'Tom', 10), (2, "Bob", 10); # 假设出现以下执行情况 # 没有事务支持情况下,Tom的钱就丢了 update bank set money=money-1 where name='Tom'; update bank set money=money+1 where name='ruakei'; # 将两条sql看做事务处理 # 开启事务 begin; update bank set money=money-1 where name='Tom'; update bank set money=money+1 where name='ruakei'; # 确认无误,提交事务 commit; # 确认有误,回滚 rollback;