开源建站软件,wordpress小工具自定义,泰州网站模板,施工企业管理会计实施方案一、子查询
子查询是另一个语句中的select语句嵌套在另一个select中。注意子查询语法上必须使用()包起来。 嵌套的那个语句返回的结果有可能是#xff1a;
一个字段#xff0c;一行记录#xff0c;一个列或一个表。嵌套的位置 where / having语句里面作为条件使用在from语…一、子查询
子查询是另一个语句中的select语句嵌套在另一个select中。注意子查询语法上必须使用()包起来。 嵌套的那个语句返回的结果有可能是
一个字段一行记录一个列或一个表。嵌套的位置 where / having语句里面作为条件使用在from语句中作为新表使用
子查询的结果作为新表
select * from (select ename,salary,salary - (select avg(salary) from t_employee) as difffrom t_employee
) where abs(diff) 500;子查询的结果作为条件
使用聚合函数将多个结果合并为一个值select *
from t_employee
where salary (select avg(salary) from t_employee;
) and gender 男使用ALL / ANY/EXIST对多个数据进行比较select *
from t_employee
where salary ALL( -- 大于所有人的薪资select salary from t_employee;
) and gender 男使用窗口函数来获取新表
问题查询每个部门薪资排名前两位的的员工
select ename, salary, did,
row_number() over(partition by did
order by salary desc) as cnt
from t_employee;子查询复制表
create table dept like t_department; -- 复制表
insert into dept (select * from t_department); -- 复制表数据create table emp as (select * from t_employee); -- 复制表和数据二、事务
事务(Database Transaction) 是一个逻辑工作单元要么完全的执行要么完全的不执行。如果操作过程中无法执行下去则会撤销已经执行的操作恢复到执行前的数据状态。
事务的ACID四特性
原子性不可分割一致性有引用关系的表的更新要一致的改变隔离性多个事务操作数据必须是线程安全的持久性一旦事务被提交数据库中数据的改变应该是永久的
事务的前提
MySQL的两种引擎InnoDB是支持事务的MyISAM是不支持事务的。 MySQL是默认自动提交事务的可以设置关闭。 set autocommit false; 这个设置当你关闭可视化软件后会重新回到自动提交。使用commit;关键字才会对数据库产生持久化影响。
基本操作
开启事务 begin; 执行后数据库开启了临时的手动提交状态提交事务 commit; 提交begin后面的SQL语句恢复自动提交事务回滚 rollback;撤销begin后面的SQL语句恢复自动提交
事务只对DML数据操作语言有效比如常用的增删改操作。但是比如truncate等DDL数据库定义语句直接删除了表之后重新创建了一个新表这个无法回滚撤销。
事务的隔离级别
事务间干扰产生的问题
脏读别人处理过程中的数据被自己读取了最后结果可能撤销和修改是脏数据。不可重复读读取了前一事务提交的数据有些时候不可重复读并不是问题。虚读指一个事务内读取到了别的事务插入的数据导致前后读取不一致和不可重复读的区别是不可重复读查询的是同一个数据项幻读针对的是一批数据整体。
隔离级别
串行化(serializable)解决了三个问题可重复读(repeatable-read)解决了不可重复读问题读已提交(read-committed)解决了脏读问题读未提交(read-uncommitted):三个问题都会出现
查询隔离等级select transaction_isolation; 设置隔离等级set transaction_isolation ‘read_uncommitted’ 这个设置是会话级别的当前会话结束后会恢复到原先的样子。
三、权限管理
权限级别
全局权限数据库权限表权限字段权限存储过程以及
用户管理
创建新用户create user ‘tom’% identified by ‘密码’%表示可以远程登录该主机。查看当前用户的权限 show grants for ‘tom’‘%’;给用户授权 grant select on db1.emp to ray%grant all on db1.* to ray%; 收回客户权限 revoke select on db1.emp from ray%;revoke all on db1.* from ray%; 删除用户 drop user ray%;
您也可以在可视化工具的窗口里面寻找User and Privileges进行操作。