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

posted @ 2020-05-27 21:02  To_Yang  阅读(289)  评论(0编辑  收藏  举报