zoukankan      html  css  js  c++  java
  • MySQL数据库笔记三:数据查询语言(DQL)与事务控制语言(TCL)

    五、数据查询语言(DQL) (重中之重)

    完整语法格式:
        select 表达式1|字段,....
        [from 表名 where 条件]
        [group by 列名]
        [having 条件]
        [order by 列名 [asc|desc]]
        [limit 位置,数量]
    <1>普通查询
        select 查询表达式;//最简单的sql语句,是一个函数
    
        select database();  select version(); select now();
    
    
    <2>条件查询
        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;
    
    -- 查询姓名为空的老师信息          在数据库中null永远的不等于null,那么怎么去判断null值呢? 通过is null、is not null
        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 '%\_%';
    
    
    
    <3>分组查询
            [group 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 后面没有出现的列名不能出现在select 和from的中间,虽然不报错但是不是分组的正确使用方式。   聚合函数中出现的列名group by后面没有无所谓。
    
    
    <4>排序查询
        语法格式: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进行升序排序,利用默认排序
    
    
    
    <5>限制结果集数量的查询(分页)
    
        编号      商品名称        商品价格        操作
        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事务默认自动开启的。
    
    在MySQK数据库中只有使用Innodb数据库引擎的数据表或库才支持事务。
    
    
    通过事务来管理 insert、update、delete语句
    
    
    事务必须满足4个条件(ACID):
        原子性:要么全部完成,要么全部不完成,,不会结束在中间的某个环节。在执行的过程中一旦
        出现错误/异常,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。
    
        一致性:事务处理前后数据保持一致。
        隔离性:事务处理必须是独立的彼此隔离
        持久性:事务对数据的修改被永久保存
    
    
    
    
    <1>为什么使用事务
        银行转账:老王给大拿转账30000元
        事务广泛使用:订单系统,银行系统等.....
    
    
    <2>MySQL事务控制
        commit(提交)、rollback(回滚)、savepoint(事务节点)
    
    
    <3>实战操作
        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 节点名称;//回滚到具体的某个节点。
    
    
    例如:
        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;////事务提交
  • 相关阅读:
    HDU 4278 Faulty Odometer 8进制转10进制
    hdu 4740 The Donkey of Gui Zhou bfs
    hdu 4739 Zhuge Liang's Mines 随机化
    hdu 4738 Caocao's Bridges tarjan
    Codeforces Gym 100187M M. Heaviside Function two pointer
    codeforces Gym 100187L L. Ministry of Truth 水题
    Codeforces Gym 100187K K. Perpetuum Mobile 构造
    codeforces Gym 100187J J. Deck Shuffling dfs
    codeforces Gym 100187H H. Mysterious Photos 水题
    windows服务名称不是单个单词的如何启动?
  • 原文地址:https://www.cnblogs.com/sl0309/p/11075160.html
Copyright © 2011-2022 走看看