From 4a0685ccd88ac6e500a6aca6c3fa47251d9541e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E4=BF=8A=E5=85=B4?= <3250103239@qq.com> Date: Thu, 19 Oct 2023 22:31:10 +0800 Subject: [PATCH] =?UTF-8?q?=E7=AC=AC=E4=BA=8C=E5=8D=81=E5=9B=9B=E6=AC=A1?= =?UTF-8?q?=E4=BD=9C=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" | 117 ++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100644 "14 \346\235\216\344\277\212\345\205\264/20231019 \344\272\213\345\212\241.md" diff --git "a/14 \346\235\216\344\277\212\345\205\264/20231019 \344\272\213\345\212\241.md" "b/14 \346\235\216\344\277\212\345\205\264/20231019 \344\272\213\345\212\241.md" new file mode 100644 index 0000000..a668d50 --- /dev/null +++ "b/14 \346\235\216\344\277\212\345\205\264/20231019 \344\272\213\345\212\241.md" @@ -0,0 +1,117 @@ +## 事务 + +##### 什么是事务 + +数据库中的事务是指对数据库执行一批操作,在同一个事务当中,这些操作最终要么全部执行成功,要么全部失败,不会存在部分成功的情况。 + +##### 事务四大特性 + +1. 原子性 +2. 一致性 +3. 隔离性:一个事务的执行不饿能被其他事务干扰,隔离性分为四个隔离级别 + 1. 读未提交 = 脏读 + 2. 读已提交 = 不可重复读 + 3. 可重复读 + 4. 串行 :最严格的隔离级别性能极低 +4. 持久性:一个事务一旦提交,他对数据库中数据的改变就应该是永久性的。当事务提交之后,数据会持久化到硬盘,修改是永久性 + +##### 操作事务 + +variables 显示所有系统变量 + +autocommit 自动提交事务 + +​ 当状态1或哦那时,系统会将你所有的insert、update、delete等操作时自动提交 + +rollback 回滚 撤销上次操作 + +关闭自动提交:set autocommit = off/0 时关闭自动提交需要手动提交事务,或者 是回滚事务 + +事务一但遇到rollback 或 commit 会结束 + +~~~mysql +start transaction () -- 开启事务手动启动一个新事务,后面代码由此事务管理 +~~~ + +##### savepoint 关键字 + +~~~mysql +savepoint -- 保存点 +~~~ + +##### 只读事务 + +~~~mysql +start transaction read only; -- 开启一个只读事务 +~~~ + + + +#### 查询复习 + +~~~mysql +CREATE DATABASE employy CHARSET utf8; +use employy; +-- 部门表 +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 * FROM emp WHERE deptno=(SELECT deptno FROM dept WHERE dname='销售部'); +-- 3、列出薪金高于公司平均薪金的所有员工。 +SELECT * 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 deptno=30; +-- 6、列出薪金高于在部门30工作的所有员工的薪金的员工姓名和薪金。 +SELECT ename 员工姓名,sal 薪资 FROM emp WHERE sal>(SELECT MAX(sal) FROM emp WHERE deptno=30); +-- 7、列出在每个部门工作的员工数量、平均工资、平均服务年限。 +select count(empno) 员工数量,avg(sal) 平均工资,avg(datediff(now(),hiredate)) div 365 平均服务年限 from emp group by deptno; +-- 8、列出所有员工的姓名、部门名称和工资。 +SELECT ename,de.dname,sal FROM emp e left JOIN dept de ON e.deptno=de.deptno; +-- 9、列出所有部门的详细信息和部门人数。 +SELECT e.deptno,de.dname,COUNT(*) FROM emp e LEFT JOIN dept de ON de.deptno=e.deptno GROUP BY deptno; +-- 10、列出各种工作的最低工资。 +SELECT job 工作,MIN(sal) 最低工资 FROM emp GROUP BY job; +-- 11、列出各个部门的 经理 的最低薪金。 +SELECT e.deptno,MIN(sal),dname FROM emp e LEFT JOIN dept de ON e.deptno=de.deptno WHERE job='经理' GROUP BY deptno; +-- 12、列出所有员工的年工资,按年薪从低到高排序。 +SELECT ename,sal*12 年薪 FROM emp ORDER BY sal DESC; +~~~ + -- Gitee