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

相关推荐
松涛和鸣2 小时前
72、IMX6ULL驱动实战:设备树(DTS/DTB)+ GPIO子系统+Platform总线
linux·服务器·arm开发·数据库·单片机
likangbinlxa2 小时前
【Oracle11g SQL详解】UPDATE 和 DELETE 操作的正确使用
数据库·sql
r i c k3 小时前
数据库系统学习笔记
数据库·笔记·学习
野犬寒鸦3 小时前
从零起步学习JVM || 第一章:类加载器与双亲委派机制模型详解
java·jvm·数据库·后端·学习
IvorySQL4 小时前
PostgreSQL 分区表的 ALTER TABLE 语句执行机制解析
数据库·postgresql·开源
·云扬·4 小时前
MySQL 8.0 Redo Log 归档与禁用实战指南
android·数据库·mysql
IT邦德4 小时前
Oracle 26ai DataGuard 搭建(RAC到单机)
数据库·oracle
惊讶的猫4 小时前
redis分片集群
数据库·redis·缓存·分片集群·海量数据存储·高并发写
不爱缺氧i4 小时前
完全卸载MariaDB
数据库·mariadb
纤纡.4 小时前
Linux中SQL 从基础到进阶:五大分类详解与表结构操作(ALTER/DROP)全攻略
linux·数据库·sql