Java预习——MySQL学习

本文介绍了MySQL数据库的基本概念、操作语句,包括创建数据库和表,以及DML操作如INSERT、UPDATE和DELETE。此外,还讨论了HTTP协议、HTTPServlet在Web开发中的作用和Session会话机制在保持用户状态中的应用。
摘要由CSDN通过智能技术生成

目录

1.什么是MySQL

2.操作数据库

2.1基本操作语句

2.2 建库

2.3 SQL详细

2.4 MySQL函数

3.上周的servlet总结

3.1 HTTP协议

3.2 HTTPServlet

3.3 Session会话机制


1.什么是MySQL

        MySQL是个数据库管理系统,用于创建,维护,管理数据库。数据库以表微单位存储数据,表内包含了字段(某一类数据的属性)和记录(某一类数据的集合 )这是一个开源的关系型数据库,支持SQL语句,支持可视化工具操作,如Navicat。下面图上是一个具体的结构模型,但是实际上当我们在库里建一个名为customer的table时id,name等都是按列排列的,同时id可以设置为AUTO_INCREMENT,这个是什么玩意待会再解释。

 唠一下MySQL的前世今生:

        MySQL是一种流行的关系型数据库管理系统(RDBMS),于1995年发布,由瑞典的MySQL AB公司推出。当时其首席开发人员为Monty Widenius,并在瑞典、芬兰和美国共同办公。 MySQL最初是一个类似于PostgreSQL的开源项目,但最终被设计成更快、更易于使用的解决方案。

        2003年,MySQL AB 公司发布第一个商业化版本 MySQL 4.0,并逐渐发展成为一个全球性质的企业级数据库管理系统,吸引了越来越多的支持者和用户。2008年1月向公众发布了Mysql 5.1 GA稳定版,MySQL成为当时全球十分受欢迎的关系型数据库之一。

2010年Sun Microsystems被甲骨文收购,使Mysql的运营形式发生变化。甲骨文公司发布了Mysql的分支版本Open Source Database,但这个举动并没有获得广泛支持。立刻有一个社区围绕着这个项目组成了MariaDB,进行了一些对Mysql的更新改进,提供一些新特性,在开源领域获得成功,并得到了Linux发行版如Redhat、Debian等及互联网公司如Google、Yahoo、Wikipedia等的采用。

        虽然MySQL数据库的所有权和掌控权发生变化,但它仍然是世界上最受欢迎的开放源代码数据库之一。如今,MySQL被广泛应用于Web开发、数据仓库、软件测试和其他领域。同时,MySQL社区也非常活跃,并继续开发新特性以满足不断发展的需求。

 问就说是chatGPT说的。

总结一下就是:MySQL本身由瑞士MySQL AB推出的,然后被Oracle公司收购了。本身是免费开源的,现在听说有些版本要收费了(忘记听哪儿说的了)。

2.操作数据库

2.1基本操作语句

mysql -u root -p  这是最基本的登入语句!!!然后有密码的话还要输入密码!!!

show databases; 显示目前数据库里边的库。

create database [数据库名];创建数据库。

help 这个指令有点用,类似于cmd里边的help,能看到指令集。

drop database [数据库名]; 传说中的删库跑路!

exit; 退出MySQL,与quit是一样的。

上边的不够详细,建库的时候详细写一些语句

2.2 建库

1.建立一个名为user的数据库

create database user; 一定要写 ‘ ; ’ 不写会报错

2.告诉数据库你要使用它了

use `user`; 注意这里的`` 不是普通的单引号,而是Tab上边那个符号。 

3.接下来建表: 

目的:建立一个 名为customer的表,里边分别有“id”,“name”,“sex”,“birthday”四个字段,其中id为键值,Extra为AUTO_INCREMENT。AUTO_INCREMENT这个玩意是 MySQL 数据库中用于定义自增列的关键字。它可应用于整数类型的数据,int,bigint都行。

  这是在终端写的sql语句,大致意思上面已经讲清楚了。现在来具体分析一下这些语句:

格式总结:

create table if not exits `表名` (

`字段名` 列类型 属性 索引 '注释',

`字段名` 列类型 属性 索引 '注释',

`字段名` 列类型 属性 索引 '注释',

`字段名` 列类型 属性 索引 '注释',

primary key (`字段名`)

)表类型 字符集设置

分析上面代码:

id,字段名为id,列类型是int类型的,不为空同时自动递增,从1递增,注释为“学号”。

name,字段名为name,列类型是varchar,长度是三十个字符,不可为空但是有默认值“匿名”。

后面的差不多是这样的......

同时该表的主键为id,字符集编码为utf-8,utf-8是什么呢?是一种字符编码方式。我们熟悉的Unicode,ASCII都是字符编码方式。顺便说一下这个表的存储引擎是InnoDB存储引擎。

InnoDB存储引擎:

MySQL不止这一个存储引擎,个人理解为是对数据库进行操作处理的一个规范。比如说,InnoDB和MyISAM这两个存储引擎,前者的出现交晚,后者是MySQL早期的存储引擎。相较于MyISAM,InnoDB具有支持事务,数据行锁定等特性,而MylSAM所支持的全文索引InnoDB并不支持。这使得InnoDB在处理并发访问下具有良好表现,而对于远程静态表查询、全文查询等方面表现弱于MyISAM。总之就是这些存储引擎各有优点,在选择时需要综合考虑。

补充:

事务的大致意思就是,当两个SQL语句同时运行,如果两个当中有一个运行失败那么就全部失败。

表锁的大致意思就是,当两个SQL语句去查询同一个表时,会锁住该表,然后第二个SQL指令就要排队。就和食堂买饭差不多。

行锁意思和表锁大致相同。

建表结果:

上面说的是用SQL语句建库,其实能直接用数据库可视化工具建库:

打开Navicat后在连接那儿建立连接,输入密码之后就有如下界面了

 

 注意看,那个里边的一个user是我们之前用SQL语句直接建的。

 

 这里就是建库的两种方法。

2.3 SQL详细

SQL (Structured Query Language) 是关系型数据库管理系统(RDBMS)的标准语言,用于对关系型数据库中的数据进行管理和操作,可以实现对数据的查询、更新、删除和插入等操作。SQL 被广泛应用于企业级应用的开发中,如CRM,ERP等。

SQL 语言的主要操作包括:

  1. 数据定义语言(DDL):用于定义和管理数据库对象,例如创建表、修改表结构、删除表等。

  2. 数据操纵语言(DML):用于对数据库中的数据进行删增改查操作,例如 SELECT、INSERT INTO、UPDATE、DELETE FROM等。

  3. 数据控制语言(DCL):用于对数据库访问权限进行控制,例如 GRANT 授予用户某些权限、REVOKE 撤销用户某些权限等。

  4. 事务控制语言(TCL):用于控制数据库事务,例如 COMMIT 提交事务、ROLLBACK 回滚事务等。

除此之外,SQL 还有一些常用的功能,例如汇总函数(SUM、AVG)、字符处理函数(CONCAT、SUBSTRING)、日期/时间处理函数(DATEADD、DATEDIFF)等。

需要注意的是,不同的数据库管理系统可能会存在 SQL 语法和细节上的差异,因此在使用具体的 RDBMS 时需要仔细了解其所使用的 SQL 方言,以免产生不必要的错误。

上面是chatGPT说的,目前个人只打算了解了解DML。

DML数据操作语言 

insert

update

delete

 1.insert into

insert into `表名` (`字段名1`,`字段名2`,`字段名3`) value ('值1','值2','值3'); 这个是往数据库里加一条记录。这里字段与表是一一对应的。

 

 

2.update

 update 表名 set 字段名 = value where (定位);这个看起来比较抽象,用起来很方便。

注意:

最后面的定位条件不给的话,会修改所有指定的列。

value是一个具体的值也可以是一个变量。

 

 

 这个是非常的形象了。

 注意:要养成一个好习惯,字段名加` `。

看上面可以知道value值可以是变量,条件定位可以多写几个条件。

3.delete 

delete from `表名` where 定位条件;记住定位条件一定要写,不然会把表里边的东西全删了。 

truncate `表名`;这个会把一个表全删完。

 

 

 注意:这儿delete后并没有影响自增的id,但是另一个删除语句会直接将自增序列归零。

  insert into `customer`(`name`,`sex`,`birthday`) value('QQ','男','2004-04-11');

 这里id直接从3开始的。

 truncate `customer`;

 insert into `customer`(`name`,`sex`,`birthday`) value('QQ','男','2004-04-11');

 

 看,这里id从1开始了。

算了,我再看看DQL,浅浅地多学一点,收回只学DML的话。

DQL数据查询语言

总之一句话,select是yyds,所有的查询都用select语句,简单的、复杂的反正只要查数据,我们就用它。据一位博主说这是数据库最核心最重要的语句,那么我们就好好学学吧

最基本的语句:

select `字段1`,`字段2`,`字段3` from `表名` where 定位条件;这些语句极其易懂,其实没啥好解释的。 

如果要查询所有的字段的话直接在from前面加一个*即可。

看我来进行一些基本操作:

 一些比较简单的应用。

select语句进阶版

1.order by

ORDER BY 用于对查询结果进行排序,在查询语句最后面加上 ORDER BY 子句即可。可以指定按照哪一列排序,默认是升序排列。这个玩意可以按照我们所指定列的进行排序。

SELECT column1, column2, ... FROM table_name

ORDER BY column1, column2, ... ASC|DESC;

ASC是升序排列,DESC是降序排列。

2.group by

GROUP BY 用于对某一列进行分组,并对每个分组进行统计。在查询语句最后加上 GROUP BY 子句即可。在使用 GROUP BY 时,SELECT 查询的列必须是经过聚合函数处理的列或者包含在 GROUP BY 子句中的列。同时,WHERE 子句中的条件必须是对 GROUP BY 中查询的列进行过滤,而不能对聚合计算后的值进行筛选。

3.limit 

分页:LIMIT 用于限制返回的结果条数,从某个位置开始,可以用于分页显示。在查询语句最后加上 LIMIT 子句即可。

基本语法:

SELECT column1, column2, ...

FROM table_name WHERE condition

LIMIT start_index, page_size;

limit子句表示(开始索引值,查询最大条数)

注意:表中第一行的默认索引值为0而不是1(就像c语言里的数组下标索引值差不多)。

 4.jion

联表查询:当需要从多张表中查询信息时,可以使用 JOIN 来连接不同的表,从而实现联表查询。JOIN 的具体实现方式包括 INNER JOIN(内连接)、LEFT JOIN(左连接)、RIGHT JOIN(右连接)和 FULL OUTER JOIN(全外连接)等,常见的是 INNER JOIN 和 LEFT JOIN。这个的语法和前面的差不多,也是最后加一个JOIN子句即可

内连接(INNER JOIN):只返回两个表中在连接条件(如 ON)中都存在的记录。

SELECT column_name(s)

FROM table1

INNER JOIN table2

ON table1.column_name = table2.column_name;

左连接(LEFT JOIN):返回左表的全部记录,以及右表中满足连接条件的记录。如果右表中没有与左表匹配的数据,则显示 NULL 值。

SELECT column_name(s)

FROM table1

LEFT JOIN table2

ON table1.column_name = table2.column_name;

不展示了,这个展示的话我还要自己再建一个表,莫得时间了,其实很简单应该,自己会去实际操作一下就行了。

2.4 MySQL函数

MySQL常用函数:

  1. COUNT:计算表中行数或某个列非 NULL 值的数量。

  2. SUM:对某个列进行求和计算。

  3. AVG:对某个列进行平均值计算。

  4. MAX:找出某个列中的最大值。

  5. MIN:找出某个列中的最小值。

SELECT customer_id,

COUNT(*) AS total_orders,

SUM(unit_price * quantity) AS total_spent,

AVG(unit_price) AS average_price,

FROM order_details,

GROUP BY customer_id;

//注:以SUM为例,()里边是将要被查询的列(字段名),AS后面的是查询后的结果放入的位置。其他也都是这样的。就不写具体例子了,需要写的时候照猫画虎总会吧。

 后面还有许多内容,比如JDBC(Java数据库连接)之类的,这个留给自己动手实操(一边实操一边截图写博客太麻烦了,时间不够,那就偷个懒只实操不写博客了......),不写了,想了解的可以看看这篇博客:传送门

3.上周的servlet总结

3.1 HTTP协议

这玩意叫超文本传输协议,底层设计就先不去讲了,上周主要学的是请求协议和响应协议。

请求协议 

请求行:http协议中的第一行为请求行一般包含请求类型,请求URL(Uniform Resource Locator),协议版本信息。如“GET/index.html HTTP/1.1”,GET是请求类型,index.html是一个网址,HTTP/1.1是协议版本。

请求头:紧随请求行,包含了请求信息,如客户端类型、接受的数据格式、Cookie、Referer等。例如:"Host: www.example.com"。

空白行:这玩意就是真空白一行,真是一行空白!!!!!!!!!!用来分割请求头和请求体。

请求体:这个是可以选择写不写的,一般来说是用来向服务器提供数据的。大致就是假如你要登入一个界面,那么登入的时候需要向服务器发出请求,这个时候请求应该带上用户名和密码。(应该是这样的吧应该吧应该吧)通常用于POST和PUT请求中。

请求协议有两种常用的,GET和POST。

响应协议:

状态行:包括协议版本,状态码,状态描述信息。例如,"HTTP/1.1 200 OK",前面是版本,200是状态码,OK是状态描述信息。

200表示请求响应成功。

404找不到目标资源。(不管目前写代码只遇到过404【愤怒】)

405请求类型不符(前端get请求后端只能处理post请求)。

500服务器内部错误。

响应头:形式应该和请求头差不多都是"K:V"形式,反映的是响应类型。

空白行:它顾名思义,就是一行空白的!!!!!!!!

响应体:HTTP响应中可选的响应内容部分称为响应体,通常用于向客户端发送数据,如HTML页面、JSON数据等。如果响应没有响应体,则在响应头和空白行之后就是响应结束了。意思就是响应的内容,其实可以写个html页面,比如说你登入的时候输入错密码了,就会出现某个界面,这个界面就是响应体负责的。当然也可以不写响应体。

上面这些上周学的是有作业的,写一个登入注册系统所以我就不一边实操一边复盘学了什么,到时候写这个系统的时候能用上。 

3.2 HTTPServlet

 这玩意很重要很重要很重要,只有写了它你才能建一个响应用户HTTP请求的程序。

HTTPServlet是Servlet接口的一个实现类,同时也是一个抽象类。在servlet.http包中。

响应流程:

1.Web用户发送http请求,Servlet接收。

2.Servlet容器解析http请求。

3.Servlet创建一个HttpRequest对象,封装接收到的http信息。

4.Servlet创建一个HttpResponse对象。

5.Servlet调用HttpServlet的service方法,把HttpResquest对象和HttpResponse对象作为sevice方法的参数传给HttpServlet对象。

6.HttpServlet调用HttpRequest的有关方法,获取http信息。

7.HttpServlet调用HttpResponse的有关方法,生成响应数据。

8.Servlet把响应数据传给Web用户。

其中HttpServlet首先必须读取Http请求的内容,Servlet容器负责创建HttpServlet对象,并把Http请求直接封装到HttpServlet对象中。

最终Servlet应用开发方法:

  • 创建一个Servlet应用类继承HttpServlet。
  • 重写doGet或者doPost
  • 将Servlet配置到web.xml文件中或者使用注解配置
  • 编写或者导入相应的前端页面,进行测试
  • 注:这儿是学长博客上写的,我抄下来,到时候写作业的时候方便看。

这里的内容有很多,还是那句话写作业的时候具体写!!!!!!

3.3 Session会话机制

 Session会话机制是指在 web 应用程序中,为了跟踪用户的身份、请求和状态信息而创建的一种机制。当用户打开一个网站或应用程序时,服务器会分配给该用户一个唯一的标识符,称为 session ID。这个 session ID 会以一种安全的方式(通常是作为一个 cookie)发送到用户的浏览器,并在整个会话期间保留。

在此期间,用户的所有请求将包含该 session ID,以便服务器可以识别用户并提供相关的信息。这些信息可以存储在服务器上也可以存储在数据库或其他持久性存储设备中

Session 机制常用于实现用户身份验证、购物车、订单处理等功能。然而,在使用 Session 时需要注意安全问题,尤其是防止会话劫持和会话固定攻击。

注意:这儿有个会话域的概念,个人理解为当用户展开会话时得到的cookie会在整个会话域中存在,在每次http请求与响应时都带上这个cookie,就表示了是同一个用户在操作。

详情请参考学长的博客:wyy yyds 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值