目录
系列文章
前言
一、数据库
二、MySQL
三、SQL
小结
系列文章
Java Web开发(Day1)
Java Web开发(Day2)
Java Web开发_异步处理以及前端中Vue框架的简单使用(Day3)
Java Web开发_Maven以及SpringBootWeb入门(Day4)
Java Web开发_请求响应与分层解耦(Day5)
前言
此博客主要记录在学习黑马程序员2023版JavaWeb开发课程的一些笔记,方便总结以及复习。
一、数据库
在上一节内容里面讲到的三层架构里面,dao层访问的数据是直接写上去的,但是实际应用开发当中呢是会去数据库中把数据提取出来展示。获得数据后再返回给前端页面。
数据库:DataBase(DB),是存储和管理数据的仓库。
那我们如何去操作管理数据库呢,就需要引入一个管理系统,我们一般称为数据库管理系统。而一般使用的编程语言就是SQL。
数据库管理系统:DataBase Management System (DBMS),操纵和管理数据库的大型软件。
SQL:Structured Query Language,操作关系型数据库的编程语言,定义了一套操作关系型数据库统一标准。
常用的数据库管理系统一般是Oracle(收费的大型数据库,Oracle公司的产品)、MySQL(开源免费的中小型数据库。Sun公司收购了MySQL,Oracle收购Sun公司,所以算起来也是Oracle公司的产品)、Microsoft SQL Server(MicroSoft公司收费的中型的数据库,C#、.net等语言常使用)、PostgreSQL(开源免费中小型的数据库)。一般大型公司会更常使用Oracle,性能会比较好。不过我们通常使用的话还是以MySQL偏多,但是学习上来说区别是不会太大的,因为大家都是以SQL语言为统一标准。
二、MySQL
MySQL官方提供了两种不同的版本:一种是商业版本:收费,可以试用30天,官方提供技术支持;另外一种是社区版本:免费,但不提供技术支持,在学习阶段社区版本基本可以满足需求。
官网下载地址:MySQL :: Download MySQL Community Server
MySQL的数据模型是关系型数据库(RDBMS): 建立在关系模型基础上,由多张相互连接的二维表组成的数据库。之后会提到的redis的话就是非关系型数据库。
在使用MySQL管理数据库的时候,客户端工具如果单纯的使用cmd来操作的话就太繁琐了,通常我们会用到一些图形化工具,比较常见的有:MySQL Workbench、Navicat、DataGrip等。MySQL Workbench通常会在学习过程当中使用到,平时比较常用的更多是Navicat、DataGrip,而DataGrip是JetBrains旗下的一款数据库管理工具,是管理和开发MySQL、Oracle、PostgreSQL的理想解决方案。官网: https://www.jetbrains.com/zh-cn/datagrip/,这是其实也就是IDEA同源的产品,目前的话DataGrip已经内置在IDEA编辑器当中了,我们可以不用再去下载安装,直接在IDEA中就可以使用。
连接数据库方法:
打开项目->在右侧点击Database->点击"+"->选择Data Source->选择MySQL->输入数据库的ip信息,以及数据库名字密码->点击下方Test Connection->连接成功的话即可。
注意:第一次连接需要点击下载数据库连接驱动。
三、SQL
SQL:一门操作关系型数据库的编程语言,定义操作所有关系型数据库的统一标准。
通用语法:
- SQL语句可以单行或多行书写,以分号结尾。
- SQL语句可以使用空格/缩进来增强语句的可读性。
- MySQL数据库的SQL语句不区分大小写。
- 注释:
- 1.单行注释:-- 注释内容 或 # 注释内容(MySQL特有)
- 2.多行注释:
SQL语句通常被分为四大类:
分类 | 全称 | 说明 |
DDL | Data Definition Language | 数据定义语言,用来定义数据库对象(数据库,表,字段) |
DML | Data Manipulation Language | 数据操作语言,用来对数据库表中的数据进行增删改 |
DQL | Data Query Language | 数据查询语言,用来查询数据库中表的记录 |
DCL | Data Control Language | 数据控制语言,用来创建数据库用户、控制数据库的访问权限 |
create table 表名(
字段1 字段类型 [ 约束 ] [ comment 字段1注释 ] ,
......
字段n 字段类型 [ 约束 ] [ comment 字段n注释 ]
) [ comment 表注释 ] ;
约束:作用于表中字段上的规则,用于限制存储在表中的数据。目的是为了保证数据库中数据的正确性、有效性和完整性。
约束 | 描述 | 关键字 |
非空约束 | 限制该字段值不能为null | not null |
唯一约束 | 保证字段的所有数据都是唯一、不重复的 | unique |
主键约束 | 主键是一行数据的唯一标识,要求非空且唯一 | primary key |
默认约束 | 保存数据时,如果未指定该字段值,则采用默认值 | default |
外键约束 | 让两张表的数据建立连接,保证数据的一致性和完整性 | foreign key |
MySQL中的数据类型有很多,主要分为三类:数值类型、字符串类型、日期时间类型。
数值类型:
分类 | 类型 | 大小(byte) | 有符号(SIGNED)范围 | 无符号(UNSIGNED)范围 | 描述 | 备注 |
数值类型 | tinyint | 1 | (-128,127) | (0,255) | 小整数值 | |
smallint | 2 | (-32768,32767) | (0,65535) | 大整数值 | ||
mediumint | 3 | (-8388608,8388607) | (0,16777215) | 大整数值 | ||
int | 4 | (-2147483648,2147483647) | (0,4294967295) | 大整数值 | ||
bigint | 8 | (-2^63,2^63-1) | (0,2^64-1) | 极大整数值 | ||
float | 4 | (-3.402823466 E+38,3.402823466351 E+38) | 0 和 (1.175494351 E-38,3.402823466 E+38) | 单精度浮点数值 | float(5,2):5表示整个数字长度,2 表示小数位个数 | |
double | 8 | (-1.7976931348623157 E+308,1.7976931348623157 E+308) | 0 和 (2.2250738585072014 E-308,1.7976931348623157 E+308) | 双精度浮点数值 | double(5,2):5表示整个数字长度,2 表示小数位个数 | |
decimal | 小数值(精度更高) | decimal(5,2):5表示整个数字长度,2 表示小数位个数 |
其中,tinyint和int算是比较常用的类型,比如说年龄或者一个数字代表一个含义,简单的一个数字存储在数据库中我们是不希望说占用太多的内存的,那tinyint使用起来就更加合适。
字符串类型:
分类 | 类型 | 大小 | 描述 |
字符串类型 | char | 0-255 bytes | 定长字符串 |
varchar | 0-65535 bytes | 变长字符串 | |
tinyblob | 0-255 bytes | 不超过255个字符的二进制数据 | |
tinytext | 0-255 bytes | 短文本字符串 | |
blob | 0-65 535 bytes | 二进制形式的长文本数据 | |
text | 0-65 535 bytes | 长文本数据 | |
mediumblob | 0-16 777 215 bytes | 二进制形式的中等长度文本数据 | |
mediumtext | 0-16 777 215 bytes | 中等长度文本数据 | |
longblob | 0-4 294 967 295 bytes | 二进制形式的极大文本数据 | |
longtext | 0-4 294 967 295 bytes | 极大文本数据 |
其中char和varchar算是应用最多的字符串类型,char和varchar的区别主要就是会不会自动根据字符串长度来规定字节。char是设定一个值固定字节大小,如果字符串太长,就报错,如果字符串没有填充满的话会添加空字符来填满,varchar的话就是设定一个上限值,如果字符串太长,就报错,如果字符串太短,就会根据字符串的长度重新适配相应的字节大小。
char(10): 最多只能存10个字符,不足10个字符,占用10个字符空间 | AB | 性能高 | 浪费空间 |
varchar(10): 最多只能存10个字符,不足10个字符, 按照实际长度存储 | ABC | 性能低 | 节省空间 |
日期时间类型:
分类 | 类型 | 大小(byte) | 范围 | 格式 | 描述 |
日期类型 | date | 3 | 1000-01-01 至 9999-12-31 | YYYY-MM-DD | 日期值 |
time | 3 | -838:59:59 至 838:59:59 | HH:MM:SS | 时间值或持续时间 | |
year | 1 | 1901 至 2155 | YYYY | 年份值 | |
datetime | 8 | 1000-01-01 00:00:00 至 9999-12-31 23:59:59 | YYYY-MM-DD HH:MM:SS | 混合日期和时间值 | |
timestamp | 4 | 1970-01-01 00:00:01 至 2038-01-19 03:14:07 | YYYY-MM-DD HH:MM:SS | 混合日期和时间值,时间戳 |
常用的就是date以及datetime,date是指代表的日期,我们可以用在入职时间、生产日期等方面,datetime是指精确到每分每秒,像我们常用的log记录,便通常都是记录确切的时间。
目前来说对SQL语句主要是能看懂能理解便可,因为有图形化工具的存在,我们可以更简便地创建表格添加数据。以下是一些常见的SQL语句:
-- 查询所有数据库show databases;-- 创建数据库create database da02;-- 使用数据库use `1`;-- 删除表格drop table IF exists tb_user;-- 创建表格create table tb_user( id int primary key auto_increment comment 'ID,唯一标识', username varchar(20) not null unique comment '用户名', name varchar(10) not null comment '姓名', age int comment '年龄', gender char(1) default '男' comment '性别') comment '用户表';-- 查看数据库建表语句show create table tb_emp-- 插入数据insert into tb_emp (username, name, gender, create_time, update_time)values ('wuji','张无忌',1,now(),now());# insert into tb_emp(id, username, password, name, gender, image, job, entrydate, create_time, update_time)# VALUES(null,'zhiruo','123','芷若',2,'1.jpg',1,'2020-10-10',now(),now());insert into tb_emp VALUES(null,'zhiruo2','123','芷若',2,'1.jpg',1,'2020-10-10',now(),now());-- 批量插入insert into tb_emp (username, name, gender, create_time, update_time)values ('wuji','张无忌',1,now(),now()),('xiexun','谢逊',1,now(),now());-- 更新数据update tb_emp set name = '张三' , update_time = now() where id = 1;-- 全部更新update tb_empset entrydate = '2010-01-01', update_time = now();-- 删除数据delete from tb_emp where id = 1;-- 删除所有数据delete from tb_emp;
需要注意的是,如果数据库名字是数字的话,使用该数据库是用use `数字` ,而不是use '数字'
另外,在更改和删除表结构的时候,如果没有选择where值也就是说没有选择更改和删除的具体行,他会更改和删除表中所有对应的数据。当然,在做这种操作的时候,IDEA编辑器还会提示你是否要继续,需要无误的话点击Execute(执行)即可。
小结
这节内容主要讲的是关于数据库的作用以及实际操作的指导,同时也了解了MySQL中的数据类型和SQL中的DDL和DML通用语法。其中数据库的使用当中目前还是以图像化工具为主,DDL、DML语法语句还是了解基本就可以了。