diff --git "a/01 \351\231\210\346\242\246\346\242\246/20231019 \344\272\213\345\212\241.md" "b/01 \351\231\210\346\242\246\346\242\246/20231019 \344\272\213\345\212\241.md" new file mode 100644 index 0000000000000000000000000000000000000000..3dad3f4501487c7d99a32e0fb81bbfd133366c4a --- /dev/null +++ "b/01 \351\231\210\346\242\246\346\242\246/20231019 \344\272\213\345\212\241.md" @@ -0,0 +1,123 @@ + + +##### 笔记 + +```mysql +事务 +一、 +1.原子性 +2.一致性 +3.隔离性 +4.持久性 +二、 +show variables like 'autocommit';-- 显示所有的系统变量 +-- 当autocommit 为1或on时 会自动将insert update delete 等操作自动提交 称为隐藏事务 +三、 +-- 关闭自动提交的功能 +set autocommit =off; +set autocommit =0;-- 需要手动提交。到rollback commit会结束事务 +-- 开启自动提交功能 +set autocommit =on; +set autocommit =1; +-- rollback 回滚 +-- commit 确认 +-- 不管autocommit是什么状态,由程序自己临时开启事务 +start transaction;-- 手动启动了一个新事物,从本行开始的操作就由此事务管理,直到使用了rollback,commit 才会结束 +四、执行大量操作。只想回滚部分内容咋办 +savepoint 保存点;-- 在本行前设一个保存点 +rollback to 保存点;-- 则保存点之后的内容都撤销 +五、只读事务 +start transaction read only;-- 只能用select(胀读:读未提交的数据) +六、默认可重复读 +show variables like (transaction_isolation); +七、四种隔离级别 +1.读未提交(脏读) +2.读已提交(不可重复读) +3.可重复读(幻读) +4.串行(最严格,性能最低) +``` + + + +##### 作业 + +```mysql +create database zy charset utf8; +use zy; +-- Sql12练习 +-- 建表语句: +-- 执行以下SQL,建表插数:8989 +-- 部门表 +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 distinct job from emp where ifnull(comm,0) +sal>1500; + +-- 2、列出在部门 "销售部" 工作的员工的姓名,假定不知道销售部的部门编号。 +select deptno from dept where dname='销售部'; +select ename from emp where deptno = (select deptno from dept where dname='销售部' +); +-- 3、列出薪金高于公司平均薪金的所有员工。 +select * from emp where sal>avg(sal); +-- 4、列出与"周八"从事相同工作的所有员工。 +select job from emp where ename='周八'; +select ename from emp where job =(select job from emp where ename='周八'); +-- 5、列出薪金等于部门30中员工的薪金的所有员工的姓名和薪金。 +select ename,ifnull(comm,0)+sal from emp; +select distinct ifnull(comm,0) +sal,ename from emp where deptno='30'; +select ename,ifnull(comm,0) +sal from emp where ifnull(comm,0) +sal in (select distinct ifnull(comm,0) +sal from emp where deptno='30'); +-- 6、列出薪金高于在部门30工作的所有员工的薪金的员工姓名和薪金。 +select ename from emp where ifnull(comm,0) +sal = (select max(ifnull(comm,0) +sal ) from emp where deptno='30'); +-- 7、列出在每个部门工作的员工数量、平均工资、平均服务年限。 +select deptno,count(*),floor(avg(ifnull(comm,0)+sal)),floor( avg(timestampdiff(year,hiredate,now()))) from emp group by deptno; + +-- 8、列出所有员工的姓名、部门名称和工资。 +select * from dept; +select ename,dname,ifnull(comm,0)+sal 工资 from emp e,dept d where e.deptno=d.deptno; +-- 9、列出所有部门的详细信息和部门人数。 + select count(empno) 部门人数, d.* from emp e,dept d where e.deptno=d.deptno group by deptno; +-- 10、列出各种工作的最低工资。 +select job,min(ifnull(comm,0)+sal) from emp group by job; + +-- 11、列出各个部门的 经理 的最低薪金。 +select deptno,min(ifnull(comm,0)+sal) from emp where job='经理' group by deptno; +-- 12、列出所有员工的年工资,按年薪从低到高排序。 +select ename,(ifnull(comm,0)+sal)*12 年工资 from emp order by 年工资; +``` +