JavaWeb----MySQL

一:JavaWeb相关介绍

Web:全球广域网,也称为万维网(www),能够通过浏览器访问的网站

JavaWeb:是用Java技术来解决相关Web互联网领域的技术栈

JavaWeb流程

1.网页:展现数据

2.数据库:存储和管理数据

3.JavaWeb程序:逻辑处理

二:数据库相关介绍

1 数据库  

存储和管理数据的仓库,数据是有组织的进行存储。
数据库英文名是 DataBase ,简称 DB
数据库就是将数据存储在硬盘上,可以达到持久化存储的效果。那又是如何解决上述问题的?使用数据库管理系统。

2 数据库管理系统

管理数据库的大型软件
英文: DataBase Management System ,简称 DBMS
在电脑上安装了数据库管理系统后,就可以通过数据库管理系统创建数据库来存储数据,也可以通过该系统对数据库中的数
据进行数据的增删改查相关的操作。我们平时说的 MySQL 数据库其实是 MySQL 数据库管理系统。

3 常见的数据库管理系统

Oracle :收费的大型数据库, Oracle 公司的产品
MySQL : 开源免费的中小型数据库。后来 Sun 公司收购了 MySQL ,而 Sun 公司又被 Oracle 收购
SQL Server MicroSoft 公司收费的中型的数据库。 C# .net 等语言常使用
PostgreSQL :开源免费中小型的数据库
DB2 IBM 公司的大型收费数据库产品
SQLite :嵌入式的微型数据库。如:作为 Android 内置数据库
MariaDB :开源免费中小型的数据库

4 SQL

英文: Structured Query Language ,简称 SQL ,结构化查询语言
操作关系型数据库的编程语言
定义操作所有关系型数据库的统一标准,可以使用 SQL 操作所有的关系型数据库管理系统,以后工作中如果使用到了其
他的数据库管理系统,也同样的使用 SQL 来操作。

5 cmd登录,退出MySQL

右键开始菜单,选择 命令提示符 ,打开黑框。 在黑框中输入, mysql - uroot - p1234 ,回车,出现下图且左下角为
mysql> ,则登录成功。
退出 mysql exit   quit

6 MySQL数据模型

(1)关系型数据库:

关系型数据库是建立在关系模型基础上的数据库,简单说,关系型数据库是由多张能互相连接的 二维表 组成的数据库。
如   订单信息表 客户信息表 都是有行有列二维表我们将这样的称为关系型数据库。
优点:
都是使用表结构,格式一致,易于维护。
使用通用的 SQL 语言操作,使用方便,可用于复杂查询。
关系型数据库都可以通过 SQL 进行操作,所以使用方便。
复杂查询。现在需要查询 001 号订单数据,我们可以看到该订单是 1 号客户的订单,而 1 号订单是李聪这个客户。以
后也可以在一张表中进行统计分析等操作。
数据存储在磁盘中,安全。

(2)数据模型

如上图,我们通过客户端可以通过数据库管理系统创建数据库,在数据库中创建表,在表中添加数据。创建的每一个数据库 对应到磁盘上都是一个文件夹。

小结: MySQL 中可以创建多个数据库,每个数据库对应到磁盘上的一个文件夹
在每个数据库中可以创建多个表,每张都对应到磁盘上一个 frm 文件
每张表可以存储多条数据,数据会被存储到磁盘中 MYD 文件中

三:SQL概述

1 SQL简介

英文: Structured Query Language ,简称 SQL
结构化查询语言,一门操作关系型数据库的编程语言
定义操作所有关系型数据库的统一标准
对于同一个需求,每一种数据库操作的方式可能会存在一些不一样的地方,我们称为 方言

2 通用语法

SQL 语句可以单行或多行书写,以分号结尾,以分号结尾才是一个完整的 sql 语句。
MySQL 数据库的 SQL 语句不区分大小写,关键字建议使用大写
注释:
单行注释 : -- 注释内容 或 # 注释内容 (MySQL 特有 )
注意:使用 -- 添加单行注释时, -- 后面一定要加空格,而 # 没有要求。
多行注释 : /* 注释 */

3 SQL分类

DDL(Data Definition Language) : 数据定义语言,用来定义数据库对象:数据库,表,列等
DDL 简单理解就是用来操作数据库,表等
DML(Data Manipulation Language) 数据操作语言,用来对数据库中表的数据进行增删改
DML 简单理解就对表中数据进行增删改
DQL(Data Query Language) 数据查询语言,用来查询数据库中表的记录 ( 数据 )
DQL 简单理解就是对数据进行查询操作。从数据库表中查询到我们想要的数据。
DCL(Data Control Language) 数据控制语言,用来定义数据库的访问权限和安全级别,及创建用户
DCL 简单理解就是对数据库进行权限控制。比如我让某一个数据库表只能让某一个用户进行操作等。
注意: 以后我们最常操作的是 DML DQL ,因为我们开发中最常操作的就是数据

四:DDL:用来操作数据库

1.操作数据库

(1)查询数据库:

show databases;

(2)创建数据库

create database ;
create database if not exists;

(3)删除数据库

drop database;
drop database if exists;

(4)使用数据库

use 数据库名称

(5)查看当前使用的数据库名称

select database();

2.操作表

(1)查询表

<1>查询当前数据库下所有表名称
show tables;
<2>查询表结构
desc 表名称

(2)创建表

(3)数据类型

(4)删除表

drop tables 表名;
drop tables if exists 表名;

(5)修改表

五:DML:对表中数据进行增删改

1 添加数据

2 修改数据

3 删除数据

六:DQL:对数据进行查询操作

1 基础查询

2 条件查询

(1)清晰

条件列表可以使用以下运算符

(2)模糊查询(like关键字)

3 排序查询

4 聚合函数

将一列数据作为一个整体,进行纵向计算

(1)分类

(2)语法

5 分组查询

where having 区别:
执行时机不一样: where 是分组之前进行限定,不满足 where 条件,则不参与分组,而 having 是分组之后对结果进行过
滤。
可判断的条件不一样: where 不能对聚合函数进行判断, having 可以。

6 分页查询

七:约束

1.概念

约束是作用于表中列上的规则,用于限制加入表的数据
例如:我们可以给 id 列加约束,让其值不能重复,不能为 null 值。
约束的存在保证了数据库中数据的正确性、有效性和完整性;添加约束可以在添加数据的时候就限制不正确的数据,年龄是3000 ,数学成绩是 -5 分这样无效的数据,继而保障数据的完整性。

2.分类

非空约束: 关键字是 NOT NULL
保证列中所有的数据不能有 null
唯一约束:关键字是 UNIQUE
保证列中所有数据各不相同
主键约束: 关键字是 PRIMARY KEY
主键是一行数据的唯一标识,要求非空且唯一。一般我们都会给没张表添加一个主键列用来唯一标识数据
检查约束: 关键字是 CHECK
保证列中的值满足某一条件
注意: MySQL 不支持检查约束。 这样是不是就没办法保证年龄在指定的范围内了?从数据库层面不能保证,以后可以在 java 代码中进行限制,一样也
可以实现要求。
默认约束: 关键字是 DEFAULT
保存数据时,未指定值则采用默认值
外键约束: 关键字是 FOREIGN KEY
外键用来让两个表的数据之间建立链接,保证数据的一致性和完整性

3.非空约束

(1)概念

非空约束用于保证列中所有数据不能有 NULL

(2)语法

4.唯一约束

(1)概念

唯一约束用于保证列中所有数据各不相同

(2)语法

5.主键约束

(1)概念

主键是一行数据的唯一标识,要求非空且唯一 ;一张表只能有一个主键

(2)语法

6.默认约束

(1)概念

保存数据时,未指定值则采用默认值

(2)语法

注意:默认约束只有在不给值时才会采用默认值。如果给了 null ,那值就是 null 值。

7.外键约束

(1)概念

外键用来让两个表的数据之间建立链接,保证数据的一致性和完整性

(2)语法

八:数据库设计

1 .数据库设计简介

(1)软件的研发步骤

(2)数据库设计概念

数据库设计就是根据业务系统的具体需求,结合我们所选用的 DBMS ,为这个业务系统构造出最优的数据存储模 型。
建立数据库中的 表结构 以及 表与表之间的关联关系 的过程。
有哪些表?表里有哪些字段?表和表之间有什么关系?

(3)数据库设计的步骤

需求分析(数据是什么 ? 数据具有哪些属性 ? 数据与属性的特点是什么)
逻辑分析(通过 ER 图对数据库进行逻辑建模,不需要考虑我们所选用的数据库管理系统)
物理设计(根据数据库自身的特点把逻辑设计转换为物理设计)
维护设计( 1. 对新的需求进行建表; 2. 表优化)

2.表关系 :一对一

如:用户 和 用户详情
一对一关系多用于表拆分,将一个实体中经常使用的字段放一张表,不经常使用的字段放另一张表,用于提升查询性
实现方式 : 在任意一方加入外键,关联另一方主键,并且设置外键为唯一 (UNIQUE)
create table tb_user_desc (
id int primary key auto_increment,
city varchar(20),
edu varchar(10),
income int,
status char(2),
des varchar(100)
);

create table tb_user (
id int primary key auto_increment,
photo varchar(100),
nickname varchar(50),
age int,
gender char(1),
desc_id int unique,

-- 添加外键
CONSTRAINT fk_user_desc FOREIGN KEY(desc_id) REFERENCES tb_user_desc(id)
);

3.表关系 :一对多

如:部门 和 员工
一个部门对应多个员工,一个员工对应一个部门。
实现方式: 在多的一方建立外键,指向一的一方的主键
-- 部门表
CREATE TABLE tb_dept(
id int primary key auto_increment,
dep_name varchar(20),
addr varchar(20)
);

-- 员工表
CREATE TABLE tb_emp(
id int primary key auto_increment,
name varchar(20),
age int,
dep_id int,

-- 添加外键 dep_id,关联 dept 表的id主键
CONSTRAINT fk_emp_dept FOREIGN KEY(dep_id) REFERENCES tb_dept(id)
);

4.表关系 :多对多

如:商品 和 订单
一个商品对应多个订单,一个订单包含多个商品。
实现方式 : 建立第三张中间表,中间表至少包含两个外键,分别关联两方主键
-- 订单表
CREATE TABLE tb_order(
id int primary key auto_increment,
payment double(10,2),
payment_type TINYINT,
status TINYINT
);

-- 商品表
CREATE TABLE tb_goods(
id int primary key auto_increment,
title varchar(100),
price double(10,2)
);

-- 订单商品中间表
CREATE TABLE tb_order_goods(
id int primary key auto_increment,
order_id int,
goods_id int,
count int
);

-- 建完表后,添加外键
alter table tb_order_goods add CONSTRAINT fk_order_id FOREIGN key(order_id) REFERENCES
tb_order(id);
alter table tb_order_goods add CONSTRAINT fk_goods_id FOREIGN key(goods_id) REFERENCES
tb_goods(id);

九:多表查询

1.介绍

多表查询顾名思义就是从多张表中一次性的查询出我们想要的数据。
连接查询:
        内连接查询:相当于查询 AB 交集数据
        外连接查询:
               左外连接查询 :相当于查询 A 表所有数据和交集部门数据
               右外连接查询 : 相当于查询 B 表所有数据和交集部分数据
子查询

2.内连接查询

-- 隐式内连接
SELECT 字段列表 FROM 表1,表2… WHERE 条件;

-- 显示内连接
SELECT 字段列表 FROM 表1 [INNER] JOIN 表2 ON 条件;
内连接相当于查询 A B 交集数据
-- 隐式内连接
SELECT * FROM emp,dept WHERE emp.dep_id = dept.did;

-- 显示内连接
select * from emp inner join dept on emp.dep_id = dept.did;
-- 上面语句中的inner可以省略,可以书写为如下语句
select * from emp join dept on emp.dep_id = dept.did;

 

3.外连接查询

-- 左外连接
SELECT 字段列表 FROM 表1 LEFT [OUTER] JOIN 表2 ON 条件;
-- 右外连接
SELECT 字段列表 FROM 表1 RIGHT [OUTER] JOIN 表2 ON 条件;
左外连接:相当于查询 A 表所有数据和交集部分数据
右外连接:相当于查询B表所有数据和交集部分数据

查询 dept 表所有数据和对应的员工信息(右外连接)

4.子查询

查询中嵌套查询,称嵌套查询为子查询。

子查询根据查询结果不同,作用不同
-- 查询 '财务部' 或者 '市场部' 所有的员工的部门did
select did from dept where dname = '财务部' or dname = '市场部';

select * from emp where dep_id in (select did from dept where dname = '财务部' or dname =
'市场部');



-- 查询入职日期是 '2011-11-11' 之后的员工信息
select * from emp where join_date > '2011-11-11' ;
-- 将上面语句的结果作为虚拟表和dept表进行内连接查询
select * from (select * from emp where join_date > '2011-11-11' ) t1, dept where
t1.dep_id = dept.did;

十:事务

1 概述

数据库的事务( Transaction )是一种机制、一个操作序列,包含了 一组数据库操作命令
事务把所有的命令作为一个整体一起向系统提交或撤销操作请求,即这一组数据库命令 要么同时成功,要么同时失败
事务是一个不可分割的工作逻辑单元。

2 语法

-- 开启事务
start transaction;  或   begin;


-- 提交事务
commit;


-- 回滚事务
rollback;

3 代码验证

-- 创建账户表
CREATE TABLE account(
id int PRIMARY KEY auto_increment,
name varchar(10),
money double(10,2)
);

-- 添加数据
INSERT INTO account(name,money) values('张三',1000),('李四',1000);


--不加事务演示问题
-- 转账操作
-- 1. 查询李四账户金额是否大于500

-- 2. 李四账户 -500
UPDATE account set money = money - 500 where name = '李四';

-- 3. 张三账户 +500
UPDATE account set money = money + 500 where name = '张三';

添加事务 sql 如下
-- 开启事务
BEGIN;

-- 转账操作
-- 1. 查询李四账户金额是否大于500

-- 2. 李四账户 -500
UPDATE account set money = money - 500 where name = '李四';

-- 3. 张三账户 +500
UPDATE account set money = money + 500 where name = '张三';

-- 提交事务
COMMIT;

-- 回滚事务
ROLLBACK;
上面 sql 中的执行成功进选择执行提交事务,而出现问题则执行回滚事务的语句。以后我们肯定不可能这样操作,而是在 java中进行操作,在 java 中可以抓取异常,没出现异常提交事务,出现异常回滚事务。

4 事务的四大特征

原子性( Atomicity : 事务是不可分割的最小操作单位,要么同时成功,要么同时失败
一致性( Consistency : 事务完成时,必须使所有的数据都保持一致状态
隔离性( Isolation : 多个事务之间,操作的可见性
持久性( Durability : 事务一旦提交或回滚,它对数据库中的数据的改变就是永久的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/436893.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

BI财务实战:毛利分析怎么做?终于有人讲透了

在上两篇&#xff0c;我们分享了 今天&#xff0c;我们将开启财务分析系列的第三篇&#xff0c;深入研究真实业务背景&#xff0c;并通过详细的分析思路和实际操作步骤&#xff0c;探讨如何在多种因素的交织影响下&#xff0c;准确定位毛利变化的关键要素。通过这一深入剖析&a…

docker 部署prometheus+grafana

首先进行部署docker 配置阿里云依赖&#xff1a; curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo # 配置centos 7的镜像源 yum install -y yum-utils device-mapper-persistent-data lvm2 # 安装一些后期或需要的的一下依…

AI制作PPT软件有哪些?亲测并推荐10款PPT制作AI工具!

在信息爆炸的时代&#xff0c;我们都渴望找到一种最佳方式&#xff0c;可以让我们的思想和观点更有效地传达出去。其实最适合的表达工具&#xff0c;就在我们身边——很多人熟悉的PPT工具&#xff0c;就是这样一个强大的媒介。 不过&#xff0c;面对市场上琳琅满目的PPT制作工…

学会这样回复客户,高效又便捷!

如何高效的回复客户信息是广大企业及商户需关注的议题。以下介绍几个实用小妙招&#xff0c;能够促进客户体验&#xff0c;提高工作效率。 1. 客户分级&#xff1a;根据重要性对客户进行分类&#xff0c;先处理重要客户的信息&#xff0c;提升他们的满意度。 2. 自动回复&#…

elementui 去掉el-input中textarea的右下角标、关闭高度调整功能

1、示例图 2、实现代码 ::v-deep .el-textarea {.el-textarea__inner {resize: none; // 去除右下角图标} }

如何提高项目成功率?分享20 种项目管理工具、技术和软件

本文将分享20种项目管理常用的工具、技术和软件&#xff0c;比如项目管理软件 PingCode、Worktile、Redmine、Jira、SAP、PrimaveraSystems等&#xff1b;项目计划阶段工具和技术WBS、甘特图、PERT图、风险评估矩阵等等。 项目管理是确保项目成功交付的关键&#xff0c;它涉及到…

龙蜥社区成立系统安全 SIG,助力系统安全生态

随着数字化时代的到来&#xff0c;云计算、大数据、人工智能等技术的广泛应用&#xff0c;操作系统承载越来越多的关键业务和数据&#xff0c;其安全性对于信息系统的运转和发展具有至关重要的作用。因此&#xff0c;加强操作系统安全防护、提高安全意识和防范能力是数字化时代…

电商API 接口列表|包含淘宝|京东|1688商品接口

电商API 接口列表 整理了一些 API 接口&#xff0c;可以用于 Vue、React、UniApp、微信小程序等项目实践练习。 为了方便调用&#xff0c;大多使用GET方式请求&#xff0c;传参采用混合 params 和 query方式。 所有接口仅供学习交流使用&#xff0c;不保证实时更新&#xff0c;…

SkyEye:助力飞行器状态控制系统仿真

飞行器与常见的航天器一样&#xff0c;属于安全关键领域的大型复杂设备&#xff0c;对安全性、可靠性有着极高的要求。为保证稳定飞行&#xff0c;需要对目标对象进行实时跟踪&#xff0c;通过发出正确的修正偏差指令来操纵飞行器改变飞行姿态&#xff0c;因此对飞行器状态控制…

Leetcode 206. 反转链表

给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[5,4,3,2,1] 示例 2&#xff1a; 输入&#xff1a;head [1,2] 输出&#xff1a;[2,1] 示例 3&#xff1a; 输…

stl的基本知识学习

1.vector&#xff1a; 2.set&#xff1a; 3.map&#xff1a; 4.栈&#xff1a; 5.队列&#xff1a; 6. unordered_map与unordered_set: 7. 位运算&#xff1a; 8.cctype&#xff1a; 导图&#xff1a;

【物联网】-智能社会的分类

万物感知 感知物理世界&#xff0c;变成数字信号 &#xff08;温度、空间、触觉、嗅觉、听觉、视觉&#xff09; 万物互联 将数据变成online&#xff0c;使智能化 &#xff08;宽联接、广联接、多联接和深联接&#xff09; 万物智能 基于大数据和人工智能的应用 &#…

独家揭秘:AI大模型在实践中的应用!

在当今社会&#xff0c;人工智能技术被广泛应用于各行各业。其中&#xff0c;AI大模型作为人工智能领域的热门话题&#xff0c;正逐渐成为现实生活中的重要应用。AI大模型是一种基于深度学习和神经网络技术的计算机模型&#xff0c;能够通过大规模数据的训练和学习&#xff0c;…

计讯物联智慧工业园区系统平台全面提升园区智能化水平

工业园区聚集着各种生产要素&#xff0c;是纺织、机械、家具等诸多产业集中的区域&#xff0c;更是资源消耗和污染物排放的集中地。根据某些工业园区环境调研&#xff0c;园区入驻企业从生产原料到生产制造过程大多带有有毒有害、易燃易爆的特性&#xff0c;再加上装置大型化、…

安装系统后,如何单个盘空间扩展多个盘空间?

1、计算机-管理-存储-磁盘空间 2、压缩C盘符&#xff0c;分出多余空间 3、将多余空间扩展&#xff0c;然后修改盘符名称

最新的前端开发技术(2024年)

关于作者&#xff1a; 还是大剑师兰特&#xff1a;曾是美国某知名大学计算机专业研究生&#xff0c;现为航空航海领域高级前端工程师&#xff1b;CSDN知名博主&#xff0c;GIS领域优质创作者&#xff0c;深耕openlayers、leaflet、mapbox、cesium&#xff0c;canvas&#xff0…

Windows 内核和 Linux 内核谁更复杂?

Windows 内核和 Linux 内核谁更复杂? 在开始前我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「Linux的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&…

nginx: mac使用vscode本地调试nginx

vscode安装c语言插件 在extensions中搜索"c/c"&#xff0c; 将前3个插件都安装 在extensions中搜索"cmake"&#xff0c; 将前2个插件都安装 下载nginx源码 nginx 源码: https://github.com/nginx/nginx 编译运行Nginx 修改 /auto/cc/conf 文件&…

【Linux C | 网络编程】多播的概念、多播地址、UDP实现多播的C语言例子

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; &#x1f923;本文内容&#x1f923;&a…

数据结构—KMP 算法:

算法思想&#xff1a; KMP算法实现寻找主串中子串的位置时&#xff0c;主串指针地址不回退&#xff0c;在比对过程中串仅仅遍历一次&#xff0c;子串的回退可以是与当前主串可重新最多匹配的地址位置。 BF与KMP算法比对&#xff1a; KMP BF 主串不用回退 主串回退&#xf…