• mysql学习


    一张常用的图说明一下mysql,并且里面的顺序不能变或者错

    mysql命令行登录 

    mysql -uroot -p
     root

    当然学习阶段我一般使用phpStudy方便快捷,后面又发现了DBeaver更加方便高效

    关闭

    mysqladmin -uroot shutdown

    创建数据库

    CREATE DATABASE 数据库名;

    CRUD

    INSERT INTO table_name ( field1, field2,...fieldN )
                           VALUES
                           ( value1, value2,...valueN );

    DELETE FROM runoob_tbl WHERE runoob_id=3;

    UPDATE table_name SET field1=new-value1, field2=new-value2
    [WHERE Clause]
    UPDATE runoob_tbl SET runoob_title='学习 C++' WHERE runoob_id=3;

    SELECT column_name,column_name
    FROM table_name
    [WHERE Clause]
    • 联表查询
    • INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录。
    • LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录。
    • RIGHT JOIN(右连接): 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录

    下面这种图带你理解一下联表查询

     这个表很形象的用!!颜色!!区分了联表的不同范围!!!

    查询参加了考试的同学,(学号(student表)( result表),姓名(student表),科目的编号( result表),分数( result表))

    student表

     result表

     下面看一段错误代码

    select studentNo,studentName,subjectNo,studentResult
    from student(左) inner join result(右)

    因为有两个studentNO,那么这段语句mysql不知道到底差谁所以会报错

    加别名(AS也可以不写),公共的用别名区分!注意!(where只能在inner join中使用,left join 和right join只能用on)

    select s.studentNo,studentName,subjectNo,studentResult
    from student AS s inner join result AS r  //这里也可以用left join 或者right join

    where s.studentNo=r.studentNo
     

    经过实验即可知下面的规律

     

    那联表查询简单点就是以那个表为基准就join 它,比如我 主要需要学生的信息就from student left join result(所以空的即没有参考考试的同学也会打印查询出来)

     以科目信息如科目分数为主就from student right join result(即不想要没有参加考试的同学)

    不过左右联表都不会影响查询的列名,该查什么还是出来什么如学号(,姓名(),科目的编号),分数

    不一样的是里面的个数不一样,也许以学生表为主的左查询会多出不少缺考的同学,哈哈

     ---------------------------------------------------------------------------------------------

          模糊查询

     ---------------------like-------------------

    查询姓刘的同学 %代表任意个字符

    select `stuNO` from `student` where studentName like '刘%'

    那么只有一个字得刘姓同学

    select `stuNO` from `student` where studentName like '刘_'

    同理的比如中间有明字得就是'%明%'.

    -----------------in-------------------------

    查询1002,1003的学生

    select `studentNo`,`stuentName` from student
    where studentNo IN(1002,1003);

    -----------------is null-----------

    select `stuNO` from `student` 
    where adress='' or adress is null

    分页和排序

    下面用一张图了解下mysql中的分页LIMIT 和排序ORDE RBY的运用

     升序ASC 降序DESC

    看一个案例

     那么如何分页呢

    比如每一页只显示五个数据

    语法     :   limit 起始值位置,页面的大小

    那么仔细对比下面两张图

     

     所以第一个参数是起始值的位置。既然知道这个了那就可以变通成网页的翻页了

    即我们把每一页设置为

    limit 第几页*页面的大小,页面的大小

    就实现页面的翻页,数据库也翻

    下面几个代码可以了解一下思想

    Connection conn = new DBConnection().getConn();
                String sql = "select * from furnitures limit ?,?;";
                PreparedStatement ps = conn.prepareStatement(sql);
                ps.setObject(1, pageIndex);
                ps.setObject(2,pageSize);
     <a href ="AuthorListPageServlet?currPage=${pageBean.currentPage + 1 }">下一页</a>
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            // TODO Auto-generated method stub
            int pageSize = 2;
            AuthorDao ad = new AuthorDao();
            //总记录数
            int record = ad.queryUserListCount();
            //接收页面传入的页码
            String strPage = request.getParameter("currPage");
            int currPage = 1;//默认第一页

    --------------------------------------------------------------------------------------------

                        事务

    简而言之就是同生送死,即将一组sql放在一个批次去执行

    那么说到事务就要谈到ACID

    原子性

    整个事务中的所有操作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。

    一致性

    你钱1000银行微信支付宝一起操作后,所有钱加起来还是1000

    隔离性

    针对多个用户同时操作,主要是排除其他事务对本次事务的影响

    持久性

    表示事务结束后的数据不随着外界原因导致数据丢失。如停电,硬盘损坏等

    那么来看看mysql中的事务操作

    1,打开关闭事务自动提交

     2开启事务,并一组的同生共死,Insert有一个不行就全部rollback

     那么整个过程就下

     

     那么了解了事务了之后开始mysql的索引

    --------------------------------------------

    索引

    想了解索引点击这里去大神的博客http://blog.codinglabs.org/articles/theory-of-mysql-index.html

    而这里只介绍怎样用

     

     如果想批量插入上百万条sql可以用python可参考这里https://www.jianshu.com/p/36b87cb3a05a

  • 相关阅读:
    Swoole addProcess的使用
    《一个人的好天气》读后感
    AIStudio强化学习7日打卡学习体验
    PythonAI百度飞桨aistudio以及PaddlePaddle实践心得
    leetcode.929.UniqueEmailAddresses
    leetcode.852.PeakIndexinaMountainArray
    leetcode.66.PlusOne
    leetcode.657.JudgeRouteCircle
    leetcode.412.FizzBuzz
    图片切碎片脚本 python PIL库实践
  • 原文地址:https://www.cnblogs.com/yangj-Blog/p/12976572.html
Copyright © 2020-2023  润新知