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
原子性
一致性
你钱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