数据库MySQL学习笔记(四)

这篇博客讲一下其他的子句并进行简单的总结,介绍事务控制语言(TCL)数据控制语言(DCL)

一、having子句

        1、在分组查询时,需要对分组之后的数据进行过滤的话,不能再使用where子句,需要使用having。

        2、having子句可以使用聚合函数,支持上述分组之后过滤。

        3、为什么不能使用where呢?

              例:select max(sal),min(sal),avg(sal),deptno from emp where avg(sal)>2000 group by deptno

              上述sql表示查询emp表中每个部门的最高工资、最低工资和平均工资,在执行时,这个sql会在执行from找到emp表后就执行where子句,但是此时,where子句之后接的是avg(sal),是一个聚合函数,此时还没有将数据进行分组,所以无法获得每个部门的信息,使用where子句会报错。由于having子句在group by之后执行,获得分组之后执行,则可以获得结果。

              正确的写法是:select max(sal),min(sal),avg(sal),deptno from emp group by deptno having 

        4、所以where和having的区别都有什么呢?

            (1)where后面放的是字段名,having后面可以放聚合函数(where属于一次过滤,having可以对分组结果二次过滤)

            (2)书写位置:where放在group by之前,having放在group by之后

            (3)执行顺序:where先执行,having后执行

二、子句总结

        一个基本的查询语句包含的子句有:select、from、where、group by、having、order by

        格式:select..from..[where..][group by..][having..][order by..] 

        执行顺序:from --> where --> group by --> having --> select --> order by

 三、事务控制语言TCL

         1、  事务的含义:在执行DML语言进行数据库管理时(例如进行批量数据的删除、修改、增加),比如在一个员工系统中,如果想删除一个人的信息,不仅要删除他的基本信息,还应该删除与此人有关的其他信息,如邮箱、地址等。从DML语言开始执行到执行结束,就会构成一个事务。

         2、只有DML操作会触发一个事务,对于事务,要保证其完整性,要么成功,要么撤回。

         3、事务要求符合的四个条件:

            (1)原子性:事务要么成功,要么撤回,不可切割。

            (2)一致性:事务开始前和结束后,要保证数据的一致性。

            (3)隔离性:当涉及多用户操作同一张表时,数据库为每一个用户开启一个事务,那么当其中一个事务正在运行时,其他事务应该处于等待状态,保证事务之间不会受到影响。

            (4)持久性:当一个事务被提交后,我们要保证数据库里的数据是永久改变的,即是数据库崩溃了,也要保证事务的完整性。

         4、TCL涉及的关键字:

              (1)commit:提交

              (2)rollback:撤回、回滚

              (3)savepoint:保存点

         5、存储引擎(ENGINE):就是指表类型。当存储引擎为innodb时,才支持事务。有一个默认的存储引擎为Myisam。不支持事务。

         6、事务的验证:

            (1)start transaction

            (2)savepoint 保存点名称

            (3)DML

            (4)commit/rollback 

/*  1、开始事务  */
start transaction
/*  2、设置保留点 */
savepoint a
/*  3、向a表中插入一条数据 */
insert into a values(2,'李四')
/*  4、回滚      */
rollback

四、数据控制语言(DCL)  不太重要哦

        1、作用:用来创建用户、给用户授权、撤销权限、删除用户。

        2、基本用法:

           (1)创建用户:create user maomao@localhost identified by "密码"

                     maomao是想要创建的用户,localhost是ip

           (2)显示用户权限:show grants for 用户名@ip

           (3)授权:grant 权限1,权限2,... on 数据库名.* to 用户名@ip

                     DML权限:insert,delete,update

                     DQL权限:select

                     DDL权限:create,alter,drop...

           (4)撤销权限:revoke 权限1,权限2,... on 数据库名.* from 用户名@ip

           (5)删除用户:drop user 用户名

           (6)使权限立即生效:flush privileges

 

 

        

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值