SQL语法、事务

一,分组
–1,概述
把数据按照一个规则划分成一个一个的组
对分组后的数据进行过滤就用固定搭配having
–2,语法
group by 字段 having 要过滤的字段
–3,练习
#---------------分组-----------
select * from emp;
select * from dept;
#最高薪资和平均薪资
select max(sal),avg(sal) from emp;
select job from emp;
#获取每个岗位的最高薪和平均薪
select max(sal),avg(sal),job from emp GROUP BY job;
#获取每个部门的最高薪和平均薪
select max(sal),avg(sal),deptno from emp GROUP BY deptno;
#给分组后的结果加过滤条件 where
select max(sal),avg(sal),deptno from emp
where deptno=1 #对select的结果过滤
group by deptno
#执行顺序:from > group by > having > select
select max(sal),avg(sal),deptno from emp
group by deptno
having deptno = 1

		#查询岗位是副总的最高薪和平均薪
		select max(sal),avg(sal) from emp where job='副总' 

		#执行顺序? from > where > group by > select
		select max(sal),avg(sal),job from emp 
		where job='副总'  #from表之后过滤表里的记录
		group by job
		#执行顺序? from > group by > having > select
		select max(sal),avg(sal),job from emp  
		group by job
		having job='副总'
		#group by是分组,要过滤固定搭配having

		#平均工资小于10000的部门
		select avg(sal),deptno from emp
		group by deptno #按照非聚合的列分组
		having avg(sal) < 15000 ; #ok
		#having deptno < 15000 ; #ok
		#having sal < 15000 ; #no ok
		#having job < 15000 ; #no ok


		#列名 也可以使用别名代替,语法:列名 别名
		select avg(sal) avg,deptno from emp
		group by deptno #按照非聚合的列分组
		having avg < 10000 ; #过滤条件

		#deptno出现的次数
		select deptno,count(deptno) X from emp
		group by deptno #非聚合列需要分组
		#2号deptno出现的次数
		#having deptno=2 #ok
		having X=2 #ok
		#having job=2 #no ok
		#having id=2 #no ok

二,事务
–1,概述
为了保证多条SQL语句要么同时成功,要么就同时失败
MySQL默认就开启了事务,一条SQL一个事务
如果想实现多条SQL在一个事务里执行,只能手动管理事务
开启事务:start transaction/begin
结束事务:commit(成功就提交,失败就自动回滚)/rollback(回滚)
–2,事务的4个特性
ACID
A是原子性–是指多条SQL要么都成功要么都失败
C是一致性–总和守恒
I是隔离性–数据库允许高并发,同时增删改查数据
D是持久性–是指对数据的操作持久有效
–3,事务的隔离级别
读未提交–效率最高,但是安全性最差(多并发时数据可能出错)
读已提交–效率较低,但是安全性较高(oracle数据库的默认级别)
可重复读–效率较低,但是安全性较高(MySQL数据库的默认级别)
串行 – 效率最低,安全性最高(实现表级锁)
–4,测试
#MySQL的事务
#MySQL会自动开启事务管理.一条SQL一条SQL的执行
#非要实现多条SQL在一个事务里,只能手动开启事务和结束事务
insert into dept values(null,‘财务部’,‘北京’)
insert into dept values(null,‘运营部’,‘上海’)
insert into dept values(null,‘人事部’,‘北京’)
select * from dept order by deptno desc
#手动管理事务
BEGIN;
insert into dept values(null,‘财务部X’,‘北京’);
insert into dept val(null,‘运营部2’,‘上海’);
insert into dept values(null,‘人事部2’,‘北京’);
commit;#提交事务–如果都正确就提交数据,如果错误数据回滚
#rollback;#回滚事务–不管SQL正确与否都会回滚–用的少

		SELECT @@tx_isolation;#REPEATABLE-READMySQL的默认值可重复读

三,索引
–1,测试
#索引
#查看索引,主键会自动创建索引
SHOW INDEX FROM teachers
#创建索引
#语法:CREATE INDEX 索引名 ON 表名 (字段名)
CREATE INDEX name_index ON teachers (tname) #普通的索引可以提高查询效率

		#创建唯一索引 --索引列出现的值必须唯一
		#ALTER TABLE 表名 ADD UNIQUE (字段名)
		ALTER TABLE teachers ADD UNIQUE (tbirthday)

		# 创建复合索引
		ALTER TABLE teachers ADD INDEX fuhe_index(prof,depart)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值