mysql 学习 博客_mysql学习

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

d4479b7b7d1815bfadf0682034a4b8c6.png

mysql命令行登录

mysql -uroot -p

root

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

关闭

mysqladmin -uroot shutdown

创建数据库

CREATE DATABASE 数据库名;

79218b92aa267cc9365067d474da2d76.png

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 相反,用于获取右表所有记录,即使左表没有对应匹配的记录

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

89ac5ca078eb9c15feb69b25cb650753.png

19f27acf5124c21bf238d048eb31cf66.png

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

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

student表

ef5b947dd47c5f20a126363d83415e7a.png

result表

0dea29273414d9340119eae041778617.png

下面看一段错误代码

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 joinwhere s.studentNo=r.studentNo

2b544502823f31a063acae1cd57ff1e5.png

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

894969e07dfe5e2680e8d38f95b1d0eb.png

540bad20d1af06b5b56526712bfd39da.png

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

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

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

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

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

模糊查询

7a96c4547125058884b67b6aa109ead5.png

---------------------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的运用

809322f0f2c4f1b6be3aad51e6f3d44d.png

升序ASC 降序DESC

看一个案例

f96a68dd39e02ce605a29aa309e3817d.png

那么如何分页呢

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

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

那么仔细对比下面两张图

183f9f29180a787f02060a8febd2acf9.png

8a4d81dd436336fc9fac905a679c8ad3.png

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

即我们把每一页设置为

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

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

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

Connection conn = newDBConnection().getConn();

String sql= "select * from furnitures limit ?,?;";

PreparedStatement ps=conn.prepareStatement(sql);

ps.setObject(1, pageIndex);

ps.setObject(2,pageSize);

下一页

protected void doGet(HttpServletRequest request, HttpServletResponse response) throwsServletException, IOException {//TODO Auto-generated method stub

int pageSize = 2;

AuthorDao ad= newAuthorDao();//总记录数

int record =ad.queryUserListCount();//接收页面传入的页码

String strPage = request.getParameter("currPage");int currPage = 1;//默认第一页

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

事务

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

那么说到事务就要谈到ACID

原子性

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

一致性

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

隔离性

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

持久性

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

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

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

b7f652693e7188de2c0459d2a55555b5.png

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

47836706aa4329fffa2db40c80a4a884.png

那么整个过程就下

8890d9b503bfd381cce4f93e09b818c0.png

735ca8fd98b6a277421d032d655308a2.png

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

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

索引

而这里只介绍怎样用

07e465e9959ccd315921a1b995c9f071.png

2b4201da3885e1eb73476dde595004d6.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值