学习Java的日子 Day51 数据库,DDL,DML

2024-06-03 15:20

本文主要是介绍学习Java的日子 Day51 数据库,DDL,DML,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Day51 MySQL

1.数据库

数据库(database)就是一个存储数据的仓库。为了方便数据的存储和管理,它将数据按照特定的规律存储在磁盘上。通过数据库管理系统,可以有效地组织和管理存储在数据库中的数据

MySQL就是数据库管理系统,操纵和管理数据库的大型软件

1.1 学习数据库的五个基本概念

1.数据库服务器

是指用来运行数据库服务的一台电脑。小型项目通常为一台,中大型项目通常是多台数据库服务器共同来存储或计算。由于数据安全非常重要,所以我们需要对数据库服务器里面的数据进经备份管理。

2.数据库 DDB

存储数据的仓库,数据是有组织的进行存储

3.数据表

例如在学员管理系统数据库中。根据业务的不同又分为了不同的数据表。专门用来存放不同人员的数据。例如:学员数据表(学号、用户名、密码);老师数据表(用户名、密码,工作经验)

4.数据字段

也叫数据列。就是我们日常所见表格里面的列。在表格中,我们会将一张用户表分成多个列。如下(表一)所示:用户编号、用户名、性别、年龄是字段。在真正的数据库中数据字段需要换成英文需要写成:id、username、sex、age。

5.数据行

真正的数据存在每一个表的行里面。字段(列)划分出来了一个表应该按照什么样的格式存数据。而行,是真正的数据。每一行需要遵循数据字段(列)的规范和要求进行存入数据。

1.2 安装MySQL

注意:

1.服务端口3306,不建议更改

2.InnoDB作为默认的数据库存储引擎

2.SQL 结构化查询语言

一切就绪,开始学SQL

结构化查询语言(Structured Query Language)简称SQL,操作关系型数据库的编程语言,定义了一套操作关系型数据库统一标准,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名

SQL是关系模型的数据库应用语言

2.1 SQL分类

1.数据定义语言(DDL ,Data Defintion Language)语句:数据定义语句,用于定义不同的数据对象、数据库、表、列、索引等。常用的语句关键字包括create、drop、alter等。

2.数据操作语言(DML , Data Manipulation Language)语句:数据操纵语句,用来对数据库表中的数据进行增删改,用于添加、删除、更新和查询数据库记录,并检查数据的完整性。常用的语句关键字主要包括insert、delete、update和select等。(DML:添加,修改,删除,DQL:查询)

重要

3.数据控制语言(DCL, Data Control Language)语句:数据控制语句,用来创建数据库用户、控制数据库的访问权限,用于控制不同数据段直接的许可和访问级别的语句。这些语句定义了数据库、表、字段、用户的访问权限和安全级别。主要的语句关键字包括grant、revoke等。

2.2 DDL

DDL:针对于数据库、表、字段操作的语言

我们将分三块来学习

1.数据库操作

2.数据表操作

3.数据字段操作

在这里插入图片描述

查询所有数据库:show databases ;

删除数据库:drop database [ if exists ] 数据库名 ;

切换数据库:use 数据库名 ;

在这里插入图片描述

在这里插入图片描述

可视化软件操作,新建数据库,设置字符集编码为utf8

在这里插入图片描述

注意:为什么不是UTF-8,而是utf8?

UTF-8是国际通用的字符集,utf8是MySQL里的字符集

2.2.1 操作库

创建库

CREATE DATABASE fy2401javaee;

删除库

DROP DATABASE fy2401javaee;

查询所有库

SHOW DATABASES;

使用库

USE fy2401javaee;

注意:库名不能修改

2.2.2 操作表
创建表

基本语法:create table 表名(字段名 字段类型 ,… , 字段名 字段类型);

VARCHAR(32):可以接收32字符长度的数据(字符串)

FLOAT(8,2):可以接收长度为8,其中有两位小数的数据

字符串:

​ char(32):最多只能存储32个字符,如果未满32个,也占32个的空间

​ varchar(32):最多只能存储32个字符,如果未满32个,占实际字符的个数

​ 注意:以上两种字符串表现形式最多只能存储255个字符

CREATE TABLE s_student(s_name VARCHAR(64),s_sex VARCHAR(32),age INT(3),salary FLOAT(8,2),course VARCHAR(32)	
)
修改表名

语法:alter table 旧表名 rename 新的表名;

ALTER TABLE s_student RENAME student;
删除表
DROP TABLE student;
查询所有表
SHOW TABLES;
2.2.3 操作字段
添加字段 ADD

语法格式:alter table 表名 add 字段名 类型;

ALTER TABLE student ADD xxx VARCHAR(32);
删除字段 DROP

语法格式:alter table 表名 drop column 字段名;

ALTER TABLE student DROP xxx;
修改字段类型 MODIFY

语法格式:alter table 表名 modify 字段名 varchar(20);

ALTER TABLE student MODIFY s_sex VARCHAR(16);
修改字段名 CHANGE

语法格式:alter table 表名 change 字段原名 字段新名 字段类型;

ALTER TABLE student CHANGE s_sex sex VARCHAR(16);
修改字段名+类型
ALTER TABLE student CHANGE s_name name VARCHAR(32);
查询字段信息 DESC

field:字段

DESC student;
获取创建表信息
SHOW CREATE TABLE student;

– CREATE TABLE student (
s_name varchar(64) COLLATE utf8mb4_general_ci DEFAULT NULL,
sex varchar(32) COLLATE utf8mb4_general_ci DEFAULT NULL,
age int DEFAULT NULL,
salary float(8,2) DEFAULT NULL,
course varchar(32) COLLATE utf8mb4_general_ci DEFAULT NULL
– ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci

创建字段与关键字冲突了怎么办?

不会冲突,数据库会优化我们的SQL命令,会给字段表名加上`,防止段与关键字冲突了

在这里插入图片描述

2.3 DML(重要)

DML:针对数据行增删查改的语言,由于查询的SQL语句较多,所以查询语句又分出来叫做DQL

增删改查,CRUD

添加数据(INSERT)

修改数据(UPDATE)

删除数据(DELETE)

新建表

前言:每张表必须有且只有一个主键

主键:主键上的数据不能重复且不能为null,主键上的数据相当于该数据行的唯一标识

PRIMARY KEY - 主键

auto_increment - 自动增长

CREATE TABLE student(id INT(3) PRIMARY KEY auto_increment,name VARCHAR(32),sex VARCHAR(32),age INT(3),salary FLOAT(8,2),course VARCHAR(32)
)
2.3.1 添加数据 INSERT

语法格式:

insert into 表 values(值1,值2,值n);

insert into 表(字段1,字段2,字段n) values(值1,值2,值n);

两种语法的区别:

基本语法1的插入语句,表中有多少个字段就必须要插入多少个值。一个不能多,一个也不能少。若有默认值,不想传,可以写上null。

基本语法2中,除非有必填字段必须要写入值外。如果有默认值的不想写可以忽略不写。mysql会自动补主默认值

方式一

INSERT INTO student VALUES(1,'龙俊','男',23,10000,'Java');

方式二

INSERT INTO student VALUES(1,'龙俊','男',23,10000,'Java'),(2,'喻平','男',20,12000,'Java');

方式三

INSERT INTO student(name,sex,age,salary,course) VALUES('龙俊','男',23,10000,'Java');
INSERT INTO student(name,sex,age,salary,course) VALUES('喻平','男',20,12000,'Java');
INSERT INTO student(name,sex,age,salary,course) VALUES('牛西燕','女',19,17000,'Java');
INSERT INTO student(name,sex,age,salary,course) VALUES('刘德华','男',21,15000,'Java');
INSERT INTO student(name,sex,age,salary,course) VALUES('马德华','男',27,10000,'Java');
INSERT INTO student(name,sex,age,salary,course) VALUES('霍建华','男',19,12000,'Java');
INSERT INTO student(name,sex,age,salary,course) VALUES('华晨宇','男',32,5000,'Python');
INSERT INTO student(name,sex,age,salary,course) VALUES('黄日华','男',45,4000,'Python');
INSERT INTO student(name,sex,age,salary,course) VALUES('任达华','男',28,7000,'Python');
INSERT INTO student(name,sex,age,salary,course) VALUES('周华健','男',30,8000,'Python');
INSERT INTO student(name,sex,age,salary,course) VALUES('欧阳震华','男',23,12000,'Python');
INSERT INTO student(name,sex,age,salary,course) VALUES('麻生希','女',30,7000,'HTML');
INSERT INTO student(name,sex,age,salary,course) VALUES('椎名空','女',23,6000,'HTML');
INSERT INTO student(name,sex,age,salary,course) VALUES('水野朝阳','女',28,8000,'HTML');
2.3.2 删除数据 DELETE

清空表数据 - 方式一:清空数据后,再次添加,id会从1开始

TRUNCATE student;

清空表数据 - 方式二:清空数据后,再次添加,id会继续递增

注意:清空数据推荐使用第二种方式,因为删除的数据如果恢复后,id不会冲突

DELETE FROM student;
2.3.3 单条件删除
DELETE FROM student WHERE id=5;
DELETE FROM student WHERE salary<=5000;
2.3.4 多条件删除

OR 或

AND 与

IN 包含

DELETE FROM student WHERE sex='女' OR course='Python';
DELETE FROM student WHERE sex='女' AND course='Java';
DELETE FROM student WHERE course IN('Python','HTML');
2.3.5 修改数据

修改所有数据

UPDATE student SET salary=10000;

单条件修改

UPDATE student SET salary = 20000 WHERE id=3;

多条件修改

UPDATE student SET salary=30000 WHERE sex='女' OR course='Python';
UPDATE student SET salary=40000 WHERE sex='女' AND course='Java';
UPDATE student SET salary=10000 WHERE course IN('Python','HTML');

修改多个数据

UPDATE student SET age=21,salary=50000 WHERE id=3;
2.3.6 查询数据(DQL)

SELECT 字段列表

FROM 表名列表

WHERE 条件列表

GROUP BY 分组字段列表

HAVING 分组后条件列表

ORDER BY 排序字段列表

LIMIT 分页参数

查询所有字段

SELECT * FROM student;

查询指定字段

SELECT name,sex,age FROM student;

查询指定字段 + 别名

SELECT name AS '姓名',sex AS '性别',age AS '年龄' FROM student;

去重查询

需求:查询学科

SELECT DISTINCT course FROM student;

单条件查询

SELECT * FROM student WHERE id=3;

多条件查询

SELECT * FROM student WHERE sex='女' OR course='Python';
SELECT * FROM student WHERE sex='女' AND course='Java';
SELECT * FROM student WHERE course IN('Java','Python');

模糊查询

%表示没有或多个字符

需求:查询出姓名中带’华’字的数据

SELECT * FROM student WHERE name LIKE '%华%';

需求:查询出姓名中第四个带’华’字的数据

SELECT * FROM student WHERE name LIKE '___华';

单字段排序

ORDER BY表示排序

ASC表示升序

DESC表示降序

需求:按照年龄排序 - 升序

SELECT * FROM student ORDER BY age ASC;

需求:按照工资排序 - 降序

SELECT * FROM student ORDER BY salary DESC;

多字段排序

需求:按照年龄排升序,年龄一致按照工资排降序

SELECT * FROM student ORDER BY age ASC,salary DESC;

限制查询

需求:查询出工资最高的学生信息

SELECT * FROM student ORDER BY salary DESC LIMIT 1;

分页查询

SELECT * FROM student LIMIT 偏移量,数据条数;

分页公式:SELECT * FROM student LIMIT (当前页-1)*数据条数,数据条数;

SELECT * FROM student LIMIT 0,5;# 第1页
SELECT * FROM student LIMIT 5,5;# 第2页
SELECT * FROM student LIMIT 10,5;# 第3页

聚合查询/统计类查询

函数 功能

count 统计数量

max 最大值

min 最小值

avg 平均值

sum 求和

需求:获取学生的总工资

SELECT SUM(salary) FROM student;

需求:获取学生的平均工资(保留2位小数)

SELECT FORMAT(AVG(salary),2) FROM student;

需求:获取学生的最高工资

SELECT MAX(salary) FROM student;

需求:获取学生的最低工资

SELECT MIN(salary) FROM student;

需求:获取学生个数

SELECT COUNT(id) FROM student;

子查询

需求:查询出工资最高的学生信息

SELECT * FROM student WHERE salary = (SELECT MAX(salary) FROM student);

分组查询

需求:查询出各个学科的平均工资

SELECT course,AVG(salary) FROM student GROUP BY course;

分组查询 + 条件

执行顺序: where > 聚合函数 > having

需求:查询出平均工资大于10000的学科

SELECT course,AVG(salary) FROM student GROUP BY course HAVING AVG(salary)>10000;
查询数据 总结

查询指定字段

去重查询

模糊查询

限制查询

分页查询

聚合查询

子查询

在这里插入图片描述

这篇关于学习Java的日子 Day51 数据库,DDL,DML的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1027368

相关文章

Java中流式并行操作parallelStream的原理和使用方法

《Java中流式并行操作parallelStream的原理和使用方法》本文详细介绍了Java中的并行流(parallelStream)的原理、正确使用方法以及在实际业务中的应用案例,并指出在使用并行流... 目录Java中流式并行操作parallelStream0. 问题的产生1. 什么是parallelS

MySQL数据库双机热备的配置方法详解

《MySQL数据库双机热备的配置方法详解》在企业级应用中,数据库的高可用性和数据的安全性是至关重要的,MySQL作为最流行的开源关系型数据库管理系统之一,提供了多种方式来实现高可用性,其中双机热备(M... 目录1. 环境准备1.1 安装mysql1.2 配置MySQL1.2.1 主服务器配置1.2.2 从

Java中Redisson 的原理深度解析

《Java中Redisson的原理深度解析》Redisson是一个高性能的Redis客户端,它通过将Redis数据结构映射为Java对象和分布式对象,实现了在Java应用中方便地使用Redis,本文... 目录前言一、核心设计理念二、核心架构与通信层1. 基于 Netty 的异步非阻塞通信2. 编解码器三、

SpringBoot基于注解实现数据库字段回填的完整方案

《SpringBoot基于注解实现数据库字段回填的完整方案》这篇文章主要为大家详细介绍了SpringBoot如何基于注解实现数据库字段回填的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以了解... 目录数据库表pom.XMLRelationFieldRelationFieldMapping基础的一些代

一篇文章彻底搞懂macOS如何决定java环境

《一篇文章彻底搞懂macOS如何决定java环境》MacOS作为一个功能强大的操作系统,为开发者提供了丰富的开发工具和框架,下面:本文主要介绍macOS如何决定java环境的相关资料,文中通过代码... 目录方法一:使用 which命令方法二:使用 Java_home工具(Apple 官方推荐)那问题来了,

Java HashMap的底层实现原理深度解析

《JavaHashMap的底层实现原理深度解析》HashMap基于数组+链表+红黑树结构,通过哈希算法和扩容机制优化性能,负载因子与树化阈值平衡效率,是Java开发必备的高效数据结构,本文给大家介绍... 目录一、概述:HashMap的宏观结构二、核心数据结构解析1. 数组(桶数组)2. 链表节点(Node

Java AOP面向切面编程的概念和实现方式

《JavaAOP面向切面编程的概念和实现方式》AOP是面向切面编程,通过动态代理将横切关注点(如日志、事务)与核心业务逻辑分离,提升代码复用性和可维护性,本文给大家介绍JavaAOP面向切面编程的概... 目录一、AOP 是什么?二、AOP 的核心概念与实现方式核心概念实现方式三、Spring AOP 的关

详解SpringBoot+Ehcache使用示例

《详解SpringBoot+Ehcache使用示例》本文介绍了SpringBoot中配置Ehcache、自定义get/set方式,并实际使用缓存的过程,文中通过示例代码介绍的非常详细,对大家的学习或者... 目录摘要概念内存与磁盘持久化存储:配置灵活性:编码示例引入依赖:配置ehcache.XML文件:配置

Java 虚拟线程的创建与使用深度解析

《Java虚拟线程的创建与使用深度解析》虚拟线程是Java19中以预览特性形式引入,Java21起正式发布的轻量级线程,本文给大家介绍Java虚拟线程的创建与使用,感兴趣的朋友一起看看吧... 目录一、虚拟线程简介1.1 什么是虚拟线程?1.2 为什么需要虚拟线程?二、虚拟线程与平台线程对比代码对比示例:三

Java中的.close()举例详解

《Java中的.close()举例详解》.close()方法只适用于通过window.open()打开的弹出窗口,对于浏览器的主窗口,如果没有得到用户允许是不能关闭的,:本文主要介绍Java中的.... 目录当你遇到以下三种情况时,一定要记得使用 .close():用法作用举例如何判断代码中的 input