From ca238e5bc20ee15c3f2e04b4c2d546394e64cde9 Mon Sep 17 00:00:00 2001 From: unknown <2112572495@qq.com> Date: Thu, 19 Oct 2023 23:00:47 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BA=8C=E5=8D=81=E5=9B=9B=E6=AC=A1=E4=BD=9C?= =?UTF-8?q?=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../20231019 \344\272\213\345\212\241.md" | 128 ++++++++++++++++++ 1 file changed, 128 insertions(+) create mode 100644 "39 \351\203\255\346\202\246\350\277\216/20231019 \344\272\213\345\212\241.md" diff --git "a/39 \351\203\255\346\202\246\350\277\216/20231019 \344\272\213\345\212\241.md" "b/39 \351\203\255\346\202\246\350\277\216/20231019 \344\272\213\345\212\241.md" new file mode 100644 index 0000000..21bb367 --- /dev/null +++ "b/39 \351\203\255\346\202\246\350\277\216/20231019 \344\272\213\345\212\241.md" @@ -0,0 +1,128 @@ +## 笔记 + +### **事务** + +- 特性: + + 1、原子性:最终要么全部成功,要么全部失败 + + 2、一致性:从一个一致性状态变换到另一个一致性状态 + + 3、隔离性:一个事务的执行不能被其他事务干扰 + + 4、持久性:一个事务一旦提交,他对数据库中数据的改变就应该是永久性的 + +- ```mysql + # 当autocommit为1或on时,系统会将你所有的insert,update,delete等操作自动提交,称为隐式事务.因为所有的提交操作都是由系统隐式帮你完成 + ``` + +- ```mysql + # 显示事务,就是自己手动来处理事务 + ``` + +- ```mysql + -- 如何开启自动提交功能 + set autocommit = on; + -- 关闭自动提交功能 + set autocommit = off; + ``` + +- ```mysql + rollback 回滚(到删除之前的状态) + ``` + +- ```mysql + # 当autocommit=0或off时,即自动提交为关闭状态时,需要手动提交事务或回滚事务,而且一个事务,一旦遇上rollback或commit时,就会结束事务 + ``` + +- ```mysql + # 不管autocommit是什么状态,由程序自己临时开启事务 + ``` + +- ```mysql + start transaction; -- 手动启动了一个新事物 + -- 不受autocommit影响 + ``` + +- ```mysql + savepoint :设置保存点,类似游戏存档的概念,可以回滚到保存点,以便回滚部分数据 + ``` + + + +## 作业 + +```mysql +create database db_emp charset utf8; +use db_emp; +-- 部门表 +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,sal from emp where sal>1500; +-- 方法二 + select job,MIN(sal) over(partition by job order by sal) from emp where sal>1500; +-- 2、列出在部门 "销售部" 工作的员工的姓名,假定不知道销售部的部门编号。 + select ename from emp where emp.deptno = (select deptno from dept where dept.dname='销售部'); +-- 3、列出薪金高于公司平均薪金的所有员工。 + select ename,sal from emp where 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 * from emp where sal>(select MAX(sal) from emp where deptno=30); +-- 7、列出在每个部门工作的员工数量、平均工资、平均服务年限。 + select COUNT(*) 员工数量,AVG(sal) 平均工资,AVG(DATEDIFF(CURRENT_DATE,hiredate)) 平均服务年限 from emp group by deptno; +-- 8、列出所有员工的姓名、部门名称和工资。 + select ename,dname,sal from emp left join dept on emp.deptno=dept.deptno; +-- 9、列出所有部门的详细信息和部门人数。 + -- select * from dept left join (select count(*),deptno from emp group by deptno) e on +-- 10、列出各种工作的最低工资。 + select distinct job,MIN(sal) over(partition by job) from emp; +-- 11、列出各个部门的 经理 的最低薪金。 +-- 1、查出各个部门的经理 + select * from emp where job='经理' +-- 2、查出最低薪资 + select MIN(sal) from emp; +-- 3、最后一步 + select * from emp where (select MIN(sal) from emp where job ='经理' group by deptno) left join dept on emp.deptno=dept.deptno ; + +-- 12、列出所有员工的年工资,按年薪从低到高排序。 + select ename 员工姓名,sal*12 年薪 from emp; +``` + -- Gitee