diff --git "a/10 \347\253\240\347\254\221\345\256\271/Day1019 \344\272\213\345\212\241.md" "b/10 \347\253\240\347\254\221\345\256\271/Day1019 \344\272\213\345\212\241.md" new file mode 100644 index 0000000000000000000000000000000000000000..a3fe0e14ab692d10014af24b8ebee023b0e51546 --- /dev/null +++ "b/10 \347\253\240\347\254\221\345\256\271/Day1019 \344\272\213\345\212\241.md" @@ -0,0 +1,139 @@ +# 今日份日志 + +```mysql +-- 事务:指对数据库执行一批操作,同一个事务中,要么全部成功,要么全部失败 + -- 特征(ACID): + -- 原子性 + -- 一致性 + -- 隔离性: + -- 读未提交:read uncommitted + -- 读已提交:read committed + -- 可重复读:repeatable read + -- 串行化:serialzable + -- 持久性 + +-- 查看事务自动提交状态 +show variables like 'autocommit'; +-- 关闭自动提交 +set autocommit = 0; +set autocommit = off; +-- 开启自动提交 +set autocommit = 1; +set autocommit = on; +-- 回滚到原始数据,附带提交的效果 +rollback; +-- 不管自动提交的状态如何,手动开启一个事务,必须手动提交 +start transaction ; +savepoint id2; -- 设置保存点 +delete from qiu where id =2; +savepoint id3; +delete from qiu where id =3; +rollback to id3; -- 回滚到保存点的操作之前的数据,不会自动提交 +rollback; +-- 提交事务 +commit; + +``` + +组内问题:事务的隔离级别有点绕脑 + + + + + +# 经典12题 + +```mysql +-- 部门表 +create table dept( + deptno int primary key auto_increment, -- 部门编号 + dname varchar(14) , -- 部门名字 + loc varchar(13) -- 地址 +) ; +-- 员工表 +create table emp( + empno int primary key auto_increment,-- 员工编号 + ename varchar(10), -- 员工姓名 - + job varchar(9), -- 岗位 + mgr int, -- 直接领导编号 + hiredate date, -- 雇佣日期,入职日期 + sal int, -- 薪水 + comm int, -- 提成 + deptno int not null, -- 部门编号 + foreign key (deptno) references dept(deptno) +); +insert into dept values(10,'财务部','北京'); +insert into dept values(20,'研发部','上海'); +insert into dept values(30,'销售部','广州'); +insert into dept values(40,'行政部','深圳'); +insert into emp values(7369,'刘一','职员',7902,'1980-12-17',800,null,20); +insert into emp values(7499,'陈二','推销员',7698,'1981-02-20',1600,300,30); +insert into emp values(7521,'张三','推销员',7698,'1981-02-22',1250,500,30); +insert into emp values(7566,'李四','经理',7839,'1981-04-02',2975,null,20); +insert into emp values(7654,'王五','推销员',7698,'1981-09-28',1250,1400,30); +insert into emp values(7698,'赵六','经理',7839,'1981-05-01',2850,null,30); +insert into emp values(7782,'孙七','经理',7839,'1981-06-09',2450,null,10); +insert into emp values(7788,'周八','分析师',7566,'1987-06-13',3000,null,20); +insert into emp values(7839,'吴九','总裁',null,'1981-11-17',5000,null,10); +insert into emp values(7844,'郑十','推销员',7698,'1981-09-08',1500,0,30); +insert into emp values(7876,'郭十一','职员',7788,'1987-06-13',1100,null,20); +insert into emp values(7900,'钱多多','职员',7698,'1981-12-03',950,null,30); +insert into emp values(7902,'大锦鲤','分析师',7566,'1981-12-03',3000,null,20); +insert into emp values(7934,'木有钱','职员',7782,'1983-01-23',1300,null,10); + + +# 1、列出最低薪金大于1500的各种工作。 +select job,min(sal) from emp group by job having min(sal) > 1500; +# 2、列出在部门 "销售部" 工作的员工的姓名,假定不知道销售部的部门编号。 +select ename from emp,dept where emp.deptno = dept.deptno and dname = '销售部'; +# 3、列出薪金高于公司平均薪金的所有员工。 +select * from emp having sal > (select avg(sal) from emp); +# 4、列出与"周八"从事相同工作的所有员工。 +select * from emp where job = (select job from emp where ename = '周八'); +# 5、列出薪金等于部门30中员工的薪金的所有员工的姓名和薪金。 +select ename,sal from emp where sal in ( +select sal from emp where deptno = 30); +# 6、列出薪金高于在部门30工作的所有员工的薪金的员工姓名和薪金。 +select ename,sal from emp where sal >all ( +select sal from emp where deptno = 30); +# 7、列出在每个部门工作的员工数量、平均工资、平均服务年限。 +select + dname, + count(empno) 员工数量, + avg(sal) 平均工资, + avg(timestampdiff(year,hiredate,now())) 平均服务年限 +from + emp,dept +where + emp.deptno = dept.deptno +group by + emp.deptno; +# 8、列出所有员工的姓名、部门名称和工资。 +select + ename, + dname, + sal +from + emp, + dept +where + emp.deptno = dept.deptno; +# 9、列出所有部门的详细信息和部门人数。 +select + dept.*, + count(empno) +from + emp, + dept +where + emp.deptno = dept.deptno +group by dept.deptno; +# 10、列出各种工作的最低工资。 +select job,min(sal) from emp group by job; +# 11、列出各个部门的 经理 的最低薪金。 +select deptno,min(sal) from emp where job = '经理' group by deptno; +# 12、列出所有员工的年工资,按年薪从低到高排序。 +select ename,(sal+ifnull(comm,0))*12 年薪 from emp order by 年薪; + +``` +