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 ) : 事务一旦提交或回滚,它对数据库中的数据的改变就是永久的

相关推荐
柒小毓4 分钟前
将excel导入SQL数据库
数据库
bug菌¹9 分钟前
滚雪球学Oracle[2.5讲]:数据库初始化配置
数据库·oracle·数据库初始化·初始化配置
一休哥助手17 分钟前
Redis 五种数据类型及底层数据结构详解
数据结构·数据库·redis
翔云12345625 分钟前
MVCC(多版本并发控制)
数据库·mysql
代码敲上天.41 分钟前
数据库语句优化
android·数据库·adb
盒马盒马1 小时前
Redis:zset类型
数据库·redis
静听山水1 小时前
mysql语句执行过程
数据库·mysql
虽千万人 吾往矣2 小时前
golang gorm
开发语言·数据库·后端·tcp/ip·golang
Q_w77422 小时前
一个真实可用的登录界面!
javascript·mysql·php·html5·网站登录
mariokkm2 小时前
Django一分钟:在Django中怎么存储树形结构的数据,DRF校验递归嵌套模型的替代方案
数据库·django·sqlite