数据库MySQL-3-数据查询语言DQL、事务控制语言TCL

数据查询语言(DQL)

DQL

  • 语法:

      select 表达式1|字段,....
      [from 表名 where 条件]
      [group by 列名]
      [having 条件]
      [order by 列名 [asc|desc]]
      [limit 位置, 数量]
    
  • 普通查询

      select 查询表达式;	
      
      select database();
      select version();
      select now();
    
  • 条件查询

      where 条件表达式, 支持运算符和函数
    
      MySQL支持的运算符
      	=、!=、>、>=、 < 、 <= 、 <>
     	and、or、not
      	is null、is not null
      	between...and.....      区间查询    多少到多少之间
      	in(set);
      	like 通配符和占位符: %  _   (模糊查询)
      	%:表示0个或者多个字符
      	_:表示占位一个
    
-- 查询所有的老师
    select * from teacher;
-- 查询id大于2的老师信息
    select * from teacher where id>2;
-- 查询姓名为空的老师信息          
    select * from teacher where name is not null
-- 查询id为1 并且 姓名是“xiaosi”的老师信息
    select * from teacher where id=1 and name ='xiaosi';
-- 查询id为1 或者 姓名是“xiaosi”的老师信息
    select * from teacher where id=1 or name ='xiaosi';
-- 查询薪水在2000到10000之间的老师信息
    select * from teacher where sal >=2000 and sal<=10000;
    select * from teacher where sal between 2000 and 10000; 
-- 查询姓名中有“王”字的老师信息
    select * from teacher where name like '%王%';
-- 查询姓名是三个字的
    select * from teacher where name like '___';
-- 查询姓“小”的老师信息
    select * from teacher where name like '小%';
-- 查询名字中含有下划线的老师
    select * from teacher where name like '%\_%';
  • 分组查询

      [groyp by 列名]  [having 条件]
      一般情况分组查询结合聚合函数一起使用
      (max()、min()、sum()、avg()、count())
    
-- 查询每个部门的平均薪资
    select dname,avg(sal) from teacher group by  dname

-- 查询部门平均薪资大于5000的部门
    select dname,avg(sal) from teacher group by  dname having  avg(sal)>5000
	select dname,avg(sal) asal from teacher group by  dname having  asal>5000
	
分组的正确使用方式,group by 后面没有出现的列名不能出现在selectfrom的中间,
虽然不报错但是不是分组的正确使用方式。聚合函数中出现的列名group by后面没有无所谓。
  • 排序查询

      order by 列名   asc|desc   默认升序(asc)
    
-- 查询老师信息,要求根据薪资从大到小进行排序

select * from teacher order by sal desc  根据sal进行降序排序
select * from teacher order by sal asc   根据sal进行升序排序
select * from teacher order by sal       根据sal进行升序排序,利用默认排序
  • 限制结果集数量的查询(分页)

      编号      商品名称        商品价格        操作
      1       充气娃娃        100.0       删除 修改
      2       熊猫娃娃        200.0       删除 修改
      3       定情娃娃        350.0       删除 修改
      .....................
      首页      上一页 1 2 3 4 5   下一页 尾页
    

语法格式:

limit n条数;  ------从第一条开始取n条数据。

语法格式:

limit start开始下标索引,count条数;  
		---从起始位置start取count条数据(起始位置从0开始)

分页(每页显示2条数据)

        第一页:    select * from teacher limit 0,2;
        第二页: select * from teacher limit 2,2;
        第三页: select * from teacher limit 4,2;
        第四页:    select * from teacher limit 6,2;
        第五页: select * from teacher limit 8,2;

分页公式:

        开始下标索引(起始位置) = (当前页-1)*每页显示条数; 

扩展:
别名

		select * from teacher; -- 查询表中所有字段记录
    	select name,sal,dname from teacher;  -- 查询表中指定字段记录
    	
    	-- 给查询的字段设置别名   同时也可以给表设置别名  通过as 关键字实现别名
    	select  name as '姓名',sal '薪资',dname '部门名称'  from teacher

事务控制语言(TCL)

MySQL事务默认自动开启的。

  • 在MySQL数据库中只有使用 Innodb 数据库引擎的数据表或库才支持事务。

  • 通过事务来管理 insert、update、delete语句

  • 事务必须满足4个条件(ACID):

      原子性:要么全部完成,要么全部不完成,,不会结束在中间的某个环节。
      	在执行的过程中一旦出现错误/异常,会被回滚(Rollback)到事务开始
      	前的状态,就像这个事务从来没有执行过一样。
      	
      一致性:事务处理前后数据保持一致。
      隔离性:事务处理必须是独立的彼此隔离
      持久性:事务对数据的修改被永久保存
    
  • 为什么使用事务?

    • 防止多人同时操作同一事物
  • MySQL事务控制

    • commit(提交)、rollback(回滚)、savepoint(事务节点)
create table student(
        id int,
        name varchar(32),
        age int,
        money double
    );
    
insert into student  values (1,'老王',18,60000);
  • 语法:

      set autocommit = false|true;	//设置事务的提交方式
      rollback;						//事务回滚
      commit;						//事务提交
      
      savepoint 节点名称;			//设置回滚的节点
      rollback to 节点名称;			//回滚到具体的某个节点。
    

MySQL事务默认自动开启的。也就是说:事务是自动提交的,如果不手动设置提交方式,则无法回滚

    set autocommit  = false;//设置事务手动提交
    
    delete from student where id=1;//删除id为1 的信息
    
    rollback;	//事务回滚
    commit;		//事务提交
    
    update student set money = money-30000 where id=1;
    savepoint t1;	//设置事务节点
    
    update student set money = money-20000 where id=1;
    rollback to t1;	//回滚到t1节点位置
    
    commit;		//事务提交
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值